mysql大小写敏感配置相关的两个参数,lower_case_file_system 和 lower_case_table_names。
查看当前mysql的大小写敏感配置
show global variables like '%lower_case%';+------------------------+-------+| variable_name | value |+------------------------+-------+| lower_case_file_system | on || lower_case_table_names | 0 |+------------------------+-------+
lower_case_file_system表示当前系统文件是否大小写敏感,只读参数,无法修改。
on 大小写不敏感
off 大小写敏感
lower_case_table_names
表示表名是否大小写敏感,可以修改。
lower_case_table_names = 0时,mysql会根据表名直接操作,大小写敏感。
lower_case_table_names = 1时,mysql会先把表名转为小写,再执行操作。
设置lower_case_table_names的值
打开my.cnf文件,加入以下语句后重启。
lower_case_table_names = 0 或 lower_case_table_names = 1
2.测试lower_case_table_names为0和1时的不同情况创建表 user
create table `user` ( `id` int(11) unsigned not null auto_increment, `name` varchar(20) not null, primary key (`id`)) engine=innodb default charset=utf8;
1.设置lower_case_table_names = 0表名与创建时大小写一致
select count(*) from user;+----------+| count(*) |+----------+| 0 |+----------+
表名与创建时大小写不一致
select count(*) from user;error 1146 (42s02): table 'user.user' doesn't exist
lower_case_table_names=0时,表名大小写敏感。
2.设置lower_case_table_names = 1表名与创建时大小写一致
select count(*) from user;+----------+| count(*) |+----------+| 0 |+----------+
表名与创建时大小写不一致
select count(*) from user;+----------+| count(*) |+----------+| 0 |+----------+
lower_case_table_names=1时,表名大小写不敏感。
3.设置lower_case_table_names=1时,原来在lower_case_table_names=0时创建的表提示不存在的解决方法在lower_case_table_names=0时使用大小写混用创建表名,再设置lower_case_table_names=1后,原创建的表使用时会提示不存在。
演示首先设置lower_case_table_names=0
创建表 user(大小写混用)
create table `user` ( `id` int(11) unsigned not null auto_increment, `name` varchar(20) not null, primary key (`id`)) engine=innodb default charset=utf8;show tables;+----------------+| tables_in_user |+----------------+| user |+----------------+
再设置lower_case_table_names=1
执行查询,不管表名是大写还是小写,都提示表不存在
select * from user;error 1146 (42s02): table 'user.user' doesn't existselect * from user;error 1146 (42s02): table 'user.user' doesn't existselect * from user;error 1146 (42s02): table 'user.user' doesn't exist
因为lower_case_table_names=1时,会先把表名转为小写后再操作,而文件中根本不存在小写的表名文件,因此出错。
解决方法:如果要将lower_case_table_names从0修改为1时,应先对旧数据表的表名进行处理,把所有数据库的表名先改为小写,最后再设置lower_case_table_names为1,否则会出现上述的问题。
总结:
操作系统不同导致大小写敏感不一致。我们在开发时,应该按大小写敏感的原则去开发,这样可以使开发的程序兼容不同的操作系统。因此,建议在开发测试环境下把lower_case_table_names的值设为0,便于在开发中就严格控制代码大小写敏感,提高代码的兼容和严谨。
本篇文章讲解了mysql大小写敏感配置问题,更多相关内容请关注。
相关推荐:
如何使用php合并数组并保留键值的方法
如何利用phpcurl实现多进程下载文件类
如何通过php判断本地及远程文件是否存在
以上就是解读mysql大小写敏感配置问题的详细内容。
