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

问题描述 投票:3回答:5

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

select * from users

我得到了结果。如果我跑:

select * from Users

我得到错误说表不存在。

但是,对于特定数据库,区分大小写不会影响。我可以使用任何我永远不会收到错误的情况。为什么?我可以看一下用于导入数据库的大sql文件,并试着找出是否有特定的指令来忽略区分大小写(?)。无论如何,为什么你认为区分大小写适用于所有数据库而不是我感兴趣的那个?其中一个区分大小写的是InnoDB。虽然不关心这个的是MyIsam。可能是原因吗?那种情况下有什么工作吗?

mysql macos case-sensitive
5个回答
3
投票

case sensitivity of database and table names取决于底层操作系统和文件系统。

在Windows上,它们不区分大小写。在Linux上,它们区分大小写。

OSX位于中间位置; HFS文件系统支持区分大小写和不区分大小写的文件名(尽管不是同时)。这取决于它的格式。


3
投票

表和列在Linux中区分大小写!要使它们不区分大小写,请按照下列步骤操作:

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

sudo nano /etc/mysql/my.cnf

[mysqld]部分下方,添加:

lower_case_table_names = 1

重启mysql

sudo /etc/init.d/mysql restart

然后在这里查看:

mysqladmin -u root -p variables

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

MySQL 5.7 documentation列出了在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服务器变量(或设置):

enter image description here

其他参考文献:


0
投票

但是,对于特定数据库,区分大小写不会影响。我可以使用任何我永远不会收到错误的情况。为什么?

这是因为只使用不区分大小写的选项(默认情况下)创建了此数据库。在创建数据库之前,首先需要将区分大小写的选项放在sql create script的顶部,因此DBMS需要注意。


0
投票
  1. /etc/mysql/my.cnf找到文件
  2. 通过添加以下行来编辑文件: [mysqld] lower_case_table_names=1
  3. sudo /etc/init.d/mysql restart

您可能需要重新创建这些表才能使其正常工作


0
投票

mysql手册说明:

如果您计划在Unix上将lower_case_table_names系统变量设置为1,则必须先将旧数据库和表名转换为小写,然后再停止mysqld并使用新变量设置重新启动它。

© www.soinside.com 2019 - 2024. All rights reserved.