MySQL 表大小写区分or不区分的问题
最近有一个项目,原先是在Windows平台的,迁移到Linux上,项目那边反馈明明可以看到某表,但是应用就报表不存在的类似问题。于是查找了相关资料之后,把该处理过程记录如下:
①、MYSQL 在linux平台上,默认是区分大小写的,而Windows是不区分的。
与这块相关的Mysql有两个参数:
lower_case_file_system:文件路径大小写;
lower_case_table_names:表名大小写。
linux下面,默认是OFF,0;(即:默认是区分大小写)
迁移到linux,需要表不区分大小,则操作如下:
修改my.cnf,在[mysqld]增加:lower_case_table_names=1(如果原指定是0,则修改为1)
重启mysql服务:
mysqladmin -uroot -p shutdown
systemctl start mysqld
②、由于迁移到linux mysql 这个环境,原先有另外一个库B,在完成①的修改后,发现B库中的表应用也出现部分表不识别的问题,报表不存在,B库中报表不存在的表名都是存在大小写夹杂的情况,定位到和这个大小写有关。通过这个理解到:如果将lower_case_table_names=1 虽然选择忽略大小写,这个忽略指的是,实际应用传过来的表名全部都会自动转成小写,拿着小写的表名和B库中的表进行匹配,发现表名匹配不上,就会出现这个问题。
解决办法:
参考①,将该lower_case_table_names=1又改回0;
重启
修改表名,全部改成小写。
再将参数由0改为1即可。