MySQL 表大小写区分or不区分的问题

最近有一个项目,原先是在Windows平台的,迁移到Linux上,项目那边反馈明明可以看到某表,但是应用就报表不存在的类似问题。于是查找了相关资料之后,把该处理过程记录如下:

①、MYSQL 在linux平台上,默认是区分大小写的,而Windows是不区分的。

与这块相关的Mysql有两个参数:

lower_case_file_system:文件路径大小写;

lower_case_table_names:表名大小写。

MySQL 表大小写区分or不区分的问题

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即可。

MySQL 表大小写区分or不区分的问题