环境
数据库从Mysql5.6导出后导入到Mysql5.7,操作系统是 Centos7
问题
在导入脚本中表名都是大写,导入后无论是命令行、navicat、还是Java代码,均提示表不存在。
Table 'XXX' doesn't exist
原因
原因是安装mysql5.7版本后,linux环境下默认是表名大小写敏感的,如果你的SQL或者工具去查表时用的是小写(一般是这样),而数据库中实际表名里含有大写,就会提示表不存在。
解决
1、首先是将mysql改为忽略表名大小写
主要是 lower_case_table_names=1 这个参数
把它加入到 my.cnf 的 [mysqld] 下面,然后重启Mysql。
1、Windows下MySQL的配置文件是my.ini,一般会在安装目录的根目录。
2、Linux下MySQL的配置文件是my.cnf,一般会放在/etc/my.cnf,/etc/mysql/my.cnf。如果找不到,可以用find命令查找。
3、Linux用rpm包安装的MySQL是不会安装/etc/my.cnf文件的
2、如果配置修改前已经有大写表名建好,则需要重新改名
但是此时会发现重启后,还是没有解决问题。
原因是大写表名是在之前就已经导入了,此时需要将所有表名中的大写字母改成小写!
这些都完成后,数据库中表名均已改为小写,此时 Sql/程序/工具 里使用大小写的表名均可识别