具有不区分大小写文件系统的 MacOS 上的 MySQL 区分大小写表名

标签 mysql macos case-sensitive

我已经研究了很多,我知道要使数据库表名称敏感,您必须设置变量 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服务器变量(或设置):

enter image description here

其他引用资料:

关于具有不区分大小写文件系统的 MacOS 上的 MySQL 区分大小写表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30779411/

相关文章:

ios - 在 Swift 中获取两个日期(月/日/小时/分钟/秒)之间的差异

objective-c - NSTableView 多行类型

sql-server - 如何确定 SQL Server 实例是否区分大小写

php - Drupal 7 : Private filesystem path set to/

mysql - 如何按名称选择具有重复 ID 的最小日期组

mysql - 将图像列添加到现有的 mysql 表中?

mysql - 如何使用ios在mysql数据库中插入 '&'?

macos - 有什么方法可以获取 Cocoa for OS X 中应用程序的运行时间吗?

c# - StreamReader 区分大小写

ruby - ruby 中正则表达式的比较