`
wwwsssaaaddd
  • 浏览: 2313 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

MYSQL数据库表名以及别名大小写敏感问题

阅读更多

知识点

MYSQL对于表名大小写敏感策略是通过lower_case_table_names参数来设定的,该参数可以在my.ini中配置,如下图所示:

     image001.jpg

 lower_case_table_names的取值和策略如下:

 

  • 0:大小写敏感策略。(unix、linux下的默认策略)
  • 1:大小写不敏感策略,对于创建的表名,即使一开始包含大写字母,在创建后将大写字母转为小写保存。(windows下的默认策略)
  • 2: 折中策略,对于创建时名称包含大写字​母的表名,在显示的时候仍然包含大写字母,但是在用于数据库表名的查找(比较)时,使用全小写的表名;

 

 

 

 

有大小写敏感问题的原因

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大小写敏感

http://www.cppblog.com/woaidongmao/archive/2009/03/26/77961.html 

了解 NFS 和文件名

http://technet.microsoft.com/zh-cn/library/cc778349(WS.10).aspx 

Mysql源码

http://www.oschina.net/code/explore/mysql-5.5.8/mysys/my_winfile.c 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics