日期:2014-05-16 浏览次数:20486 次
知识点
MYSQL对于表名大小写敏感策略是通过lower_case_table_names参数来设定的,该参数可以在my.ini中配置,如下图所示:
? ? ?
?lower_case_table_names的取值和策略如下:
?
?
?
?
?
有大小写敏感问题的原因
u?mysql的表空间文件处理上依赖于操作系统的文件处理策略,mysql在实现创建、修改、读取表空间文件是直接采用操作系统的文件操作接口。
??????从Mysql源码目录mysys下的my_winfile.c的my_create函数,明显看到mysql在windows系统和其他系统创建文件的接口是不一样
PS:open、write、read是linux下c++的标准文件操作函数;my_win_open、my_win_write、my_win_read间接调用Windows?C?Run-Time?library的CreateFile、WriteFile、ReadFile操作文件
?
u??windows和类Unix的文件系统对与大小写字母的处理策略不同:windows?的文件系统对大小写不敏感,而类Unix的是大小写敏感的;
由于在文件操作上mysql完全依赖OS文件系统,mysql自己不"做主"。?考虑成本,Mysql没有必要开发一套自己的FS
?
?
思考
如果在windows下强制把lower_case_table_names设置为0,使用mysql会出现什么样的问题?
从mysql启动的Warning中可以找到一些线索?:)
[Warning]?You?have?forced?lower_case_table_names?to?0?through?acommand-line?option,?even?though?your?file?system?'C:\MySQL?Server?5.5\Data\'?is?case?insensitive.??This?means?that?you?can?corrupt?a?MyISAM?table?by?accessing?it?with?different?cases.?You?should?consider?changing?lower_case_table_names?to?1?or?2
?
?
参考资料:
Mysql大小写敏感