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

use*_*937 4 mysql macos case-sensitive

我已经研究了很多并且我理解使数据库表名称敏感,您必须设置变量lower_case_table_names = 0。我在 osX 上。我在 my.cnf 中做了这个改变。在那之后,如果我跑

select * from users
Run Code Online (Sandbox Code Playgroud)

我得到结果。如果我运行:

select * from Users
Run Code Online (Sandbox Code Playgroud)

我收到错误说表不存在。

但是,对于特定的数据库,区分大小写不受影响。我可以使用任何情况,我永远不会收到错误。为什么?我可以查看用于导入数据库的大 sql 文件,并尝试找出是否有忽略大小写敏感的特定指令 (?)。无论如何,为什么您认为区分大小写适用于所有数据库而不是我感兴趣的数据库?区分大小写的其中之一是 InnoDB。而不关心这一点的是 MyIsam。这可能是原因吗?在这种情况下有什么解决办法吗?

Pra*_*man 5

Linux 中的表和列区分大小写!要使它们不区分大小写,请执行以下操作:

打开终端并编辑 /etc/mysql/my.cnf

sudo nano /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)

在该[mysqld]部分下方,添加:

lower_case_table_names = 1
Run Code Online (Sandbox Code Playgroud)

重启mysql

sudo /etc/init.d/mysql restart
Run Code Online (Sandbox Code Playgroud)

然后在这里检查:

mysqladmin -u root -p variables
Run Code Online (Sandbox Code Playgroud)

仅仅改变lower_case_table_names 设置是不够的。它需要在导入数据库之前完成。

MySQL的5.7文档列出了Windows和Linux / UNIX之间移动的过程。该参考资料中有关 Mac OSX 的说明:

一个值得注意的例外是 OS X,它基于 Unix,但使用不区分大小写的默认文件系统类型 (HFS+)。然而,OS X 也支持 UFS 卷,就像在任何 Unix 上一样区分大小写。

查看手册页以确保遵循您所需的强制区分大小写规则。查看并验证您是否按正确的顺序执行了这些步骤:

要转换一个或多个整个数据库,请在设置lower_case_table_names 之前转储它们,然后删除数据库,并在设置lower_case_table_names 后重新加载它们:

1 - 使用 mysqldump 转储每个数据库:

mysqldump --databases db1 > db1.sql

mysqldump --databases db2 > db2.sql

... 为每个必须重新创建的数据库执行此操作。

2 - 使用 DROP DATABASE 删除每个数据库。

3 - 停止服务器,lower_case_table_names[mysqld]您的\etc\mysql\my.cnf文件部分进行设置,然后重新启动服务器。

4 - 重新加载每个数据库的转储文件。因为设置了lower_case_table_names,所以每个数据库和表名在重新创建时都将转换为小写:

mysql < db1.sql

mysql < db2.sql

关于 MySQL 系统变量lower_case_table_names服务器变量(或设置):

在此处输入图片说明

其他参考资料:


小智 5

MacOsx 10.13,docker 3.0.1。
\n将lower_case_table_names更改为0对我没有帮助。Mysql 报错

\n
[ERROR] The server option \xe2\x80\x98lower_case_table_names\xe2\x80\x99 is configured to use case sensitive table names but the data directory is on a case-insensitive file system which is an unsupported combination. Please consider either using a case sensitive file system for your data directory or switching to a case-insensitive table name mode.\n
Run Code Online (Sandbox Code Playgroud)\n

Use gRPC FUSE for file sharing在 docker 设置中关闭此设置有帮助:\n在此输入图像描述

\n