mysql 数据库在windows下默认表名是不区分大小写的, 但linux默认是区分的.
在linux下修改/etc/my.cnf需要在[mysqld]添加lower_case_table_names=1, 然后要通过命令 sudo service mysqld restart重启.
但如果之前表已经建好,这时会出现错误, 如select * from XX.XX; 会告诉你xx.xx不存在,即时show tables显示XX.XX真的存在.
这时要重建数据库, 如何转换而不重建, 没有查出来.我想是发现这个问题一般比较早, 数据库中还没有数据.
这时通过
drop database mydb;
Error dropping database (can't rmdir './mydb', errno: 39这时你跑show tables; 你会发现全时含大写表名的表存在的.
因为lower_case_table_names=1意味着全是小写,大写的不会删除;
这时要做的是
1. 修改lower_case_table_names=0;
2. sudo service mysqld restart;
3. drop database xxx;
4. 修改lower_case_table_names=1;
5. sudo service mysqld restart;6. create database xxx;
6. 给用户权限,grant all privileges on xxx.* to xxx_user;
按道理是lower_case_table_names=2,也行, 但在/var/log/mysqld.log中看到了
[Warning] lower_case_table_names was set to 2, even though your the file system '/var/lib/mysql/' is case sensitive. Now setting lower_case_table_names to 0 to avoid future problems.