MySQL报错 table “xxx” doesn‘t exit的解决
作者:Hansel.Wn
问题描述
以前项目的数据库部署在云端Windows Server系统上,最近有需求要把数据库移到CentOS7的服务器上,数据转移到时候一切正常,并且使用Navicat for MySQL访问数据库的时候也没有异常,但是项目实际运行起来的时候接口一直在报错,根据错误提示信息发现,好多表不存在:
报错原因
MySQL在Windows下不区分大小写,但是在Linux系统中默认是区分大小写的,上述问题就是由于英文字母大小写敏感导致的。
MySQL大小写敏感配置相关的两个参数,lower_case_file_system
和 lower_case_table_names
。
查看当前MySQL的大小写敏感配置,可以使用如下语句
lower_case_file_system
代表当前系统文件是否大小写敏感,只读参数,无法修改。ON 大小写不敏感,OFF 大小写敏感。这个参数描述的是数据库当前所在的操作系统的文件目录是否大小写敏感,OFF表示大小写敏感,ON表示大小写不敏感。此参数是只读的。
lower_case_table_names
代表表名是否大小写敏感,可以修改,参数有0、1、2三种。
0 大小写敏感。(Unix,Linux默认) 创建的库表将原样保存在磁盘上,SQL语句也会原样解析。
1 大小写不敏感。(Windows默认) 创建数据库表时,MySQL将所有的库表名转换成小写存储在磁盘上。 SQL语句同样会将库表名转换成小写。 如需要查询以前创建的表,即便执行select * from Testtable,也会被转换成select * from testtable,致使报错表不存在。
2 大小写不敏感(OS X默认) 创建的库表将原样保存在磁盘上, 但SQL语句将库表名转换成小写。
解决方法
修改配置文件,在Linux系统中修改my.cnf文件,在Windows下修改my.ini文件,新增或修改以下内容。
lower_case_table_names = 0 或 lower_case_table_names = 1 `` - 重启MySQL服务 ```shell > service mysqld restart
如果要将lower_case_table_names从0(敏感)修改为1(不敏感)时,必须先对旧数据表的表名进行处理,把所有数据库的表名先改为小写,最后再设置lower_case_table_names为1,否则依然会出现无法找到表名的问题。
到此这篇关于MySQL报错 table “xxx” doesn‘t exit的解决的文章就介绍到这了,更多相关MySQL table “xxx” doesn‘t exit内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!