问题:在Linux上安装了MySQL5.7,应用系统已经初始化,数据已经进入了数据库。使用应用系统时才发现系统有个模块是没有区分大小写在操作数据库的,所以后台报数据库插入SQL出错。因此想要修改MySQL为大小写不敏感。这儿问题就来了:按照网上的大部分的说法,修改/etc/my.cnf,将[mysqld]下的lower_case_table_names设为1(去掉该行前面的#即可)保存,重启mysql即可(sevice mysqld stop;service mysqld start)。事实上,这样修改之后连接数据库,所有的表都读不了了,报table doesn't exit的错误,虽然show tables还是可以看到那些table。
解决办法:按照官方文档的说法,将数据库设置为大小写不敏感后,保存的数据库和表都是小写的。如果修改配置前没有任何数据插入,那么可以直接重启使用;而如果在大小写敏感的情况下已经插入了数据,那么需要先修改已有的数据库和表名为小写:RENAME TABLE T1 to t1; 然后进行修改my.cnf的操作。假如数据库和表很多,可以先dump出来,然后drop掉数据库,再修改my.cnf,重启数据库,再将数据导入。我采用的是后面一种方法:mysqldump。
具体操作:
1、使用mysqldump导出数据库。
在命令行输入:mysqldump -u mysql --databases regist > regist.sql -p
然后输入mysql用户的密码。(注意,如果不输入参数-p的话,会出现access denied的错误)
2、进入mysql命令行,将数据库删除。
mysql -u mysql -p
输入mysql用户的密码。
drop database regist;
3、停掉数据库,修改my.cnf文件,启动数据库。
service mysqld stop
修改/etc/my.cnf,将[mysqld]下的lower_case_table_names设为1(去掉该行前面的#即可)保存。
service mysqld start
4、恢复数据库。
mysql -u mysql < regist.sql -p
输入mysql用户的密码。
现在进入mysql查看导入的数据库和表,都是小写的了。 至于你的应用系统能不能直接使用这个修改后的数据库,就需要测试了。反正我试了下我的应用系统,比较傻,操作的时间点过去了,只能删除数据库,重新运行应用系统插入数据(意味着上面做dump的操作都是多余的了)。只不过现在是不会报错的了。
官方文档参考:
原文如下:<