我已经研究了很多,我知道要使数据库表名称敏感,您必须设置变量 lower_case_table_names=0。 我在 osX 上。我在 my.cnf 中做了这个改变。 在那之后,如果我跑
select * from users
我得到了结果。如果我运行:
select * from Users
我收到错误消息说表不存在。
但是,对于特定的数据库,区分大小写不受影响。我可以使用任何我永远不会收到错误的案例。为什么?我可以查看用于导入数据库的大型 sql 文件,并尝试找出是否有特定指令忽略区分大小写(?)。 无论如何,为什么您认为区分大小写适用于所有数据库而不是我感兴趣的数据库?其中一个区分大小写的是 InnoDB。而不关心这一点的是 MyIsam。会不会是这个原因?在这种情况下有什么解决办法吗?
最佳答案
表和列在 Linux 中区分大小写!要使它们不区分大小写,请遵循以下操作:
Open terminal and edit
/etc/mysql/my.cnf
sudo nano /etc/mysql/my.cnf
Underneath the
[mysqld]
section, add:lower_case_table_names = 1
Restart mysql
sudo /etc/init.d/mysql restart
Then check it here:
mysqladmin -u root -p variables
仅仅改变 lower_case_table_names 设置是不够的。它需要在导入数据库之前完成。
MySQL 5.7 documentation列出了在 Windows 和 Linux/UNIX 之间移动的过程。该引用资料中有关 Mac OSX 的注释:
One notable exception is OS X, which is Unix-based but uses a default file system type (HFS+) that is not case sensitive. However, OS X also supports UFS volumes, which are case sensitive just as on any Unix.
查看手册页以确保遵循您想要的强制区分大小写的规则。查看并验证您是否按正确顺序执行了这些步骤:
To convert one or more entire databases, dump them before setting lower_case_table_names, then drop the databases, and reload them after setting lower_case_table_names:
1 - Use mysqldump to dump each database:
mysqldump --databases db1 > db1.sql
mysqldump --databases db2 > db2.sql
... Do this for each database that must be recreated.
2 - Use DROP DATABASE to drop each database.
3 - Stop the server, set
lower_case_table_names
in the[mysqld]
section of your\etc\mysql\my.cnf
file, and restart the server.4 - Reload the dump file for each database. Because lower_case_table_names is set, each database and table name will be converted to lowercase as it is recreated:
mysql < db1.sql
mysql < db2.sql
关于MySQL系统变量lower_case_table_names
服务器变量(或设置):
其他引用资料:
关于具有不区分大小写文件系统的 MacOS 上的 MySQL 区分大小写表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30779411/