知识点
MYSQL对于表名大小写敏感策略是通过lower_case_table_names参数来设定的,该参数可以在my.ini中配置,如下图所示:
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
分享到:
相关推荐
MYSQL数据库取表名易语言源码。@易语言数据库教程。
Mysql查询操作 MySql下实现查询表名不区分大小写
下面小编就为大家带来一篇mysql表名忽略大小写配置方法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
今天小编就为大家分享一篇关于MySQL数据库大小写敏感的问题,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
MySQL8.0之后,数据库和表名称的大小写问题与之前的MySQL设置不同,需要引起重视,不然后续修改很麻烦。
编辑MySQL安装目录下的my.ini 文件,在[mysqld]节下 添加 lower_case_table_names=0 (备注:为0时大小写敏感,为1时大小写不敏感,默认为1),可以实现MySql按照建表Sql语句的大小写状态来定义表名
在 MySQL 中,数据库和表对应于那些目录下的目录和文件。因而,操作系统的敏感性决定数据库和表命名的大小写敏感。
MySql表名大小写的问题.txt
今天郁闷死了,在LINUX下调一个程序老说找不到表,但是我明明是建了表的,在MYSQL的命令行下也可以查到,为什么程序就找不到表呢?
易语言MYSQL取表名源码,MYSQL取表名
在默认情况下,MySQL搜索不区分大小写(但某些字符集始终区分大小写,如czech)。这意味着,如果你使用col_name LIKE \\\'a%\\\'进行搜索,你将获得以A或a开始的所有列。
MYSQL数据库大进级,是非常全面的MYSQL数据库进阶学习资料!
国家开放大学 MySQL数据库应用 实验训练1 在MySQL中创建数据库和表
解决MySQL数据库乱码问题,以及命令行查表乱码问题
MySql数据库MySql数据库MySql数据库MySql数据库MySql数据库MySql数据库MySql数据库MySql数据库MySql数据库MySql数据库MySql数据库MySql数据库MySql数据库MySql数据库MySql数据库MySql数据库