我已经研究了很多,并且我理解为使数据库表名称敏感,你必须设置变量lower_case_table_names = 0。我在osX上。我在my.cnf做了这个改变。在那之后,如果我跑
select * from users
我得到了结果。如果我跑:
select * from Users
我得到错误说表不存在。
但是,对于特定数据库,区分大小写不会影响。我可以使用任何我永远不会收到错误的情况。为什么?我可以看一下用于导入数据库的大sql文件,并试着找出是否有特定的指令来忽略区分大小写(?)。无论如何,为什么你认为区分大小写适用于所有数据库而不是我感兴趣的那个?其中一个区分大小写的是InnoDB。虽然不关心这个的是MyIsam。可能是原因吗?那种情况下有什么工作吗?
case sensitivity of database and table names取决于底层操作系统和文件系统。
在Windows上,它们不区分大小写。在Linux上,它们区分大小写。
OSX位于中间位置; HFS
文件系统支持区分大小写和不区分大小写的文件名(尽管不是同时)。这取决于它的格式。
表和列在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
服务器变量(或设置):
其他参考文献:
但是,对于特定数据库,区分大小写不会影响。我可以使用任何我永远不会收到错误的情况。为什么?
这是因为只使用不区分大小写的选项(默认情况下)创建了此数据库。在创建数据库之前,首先需要将区分大小写的选项放在sql create script的顶部,因此DBMS需要注意。
/etc/mysql/my.cnf
找到文件[mysqld]
lower_case_table_names=1
sudo /etc/init.d/mysql restart
您可能需要重新创建这些表才能使其正常工作
mysql手册说明:
如果您计划在Unix上将lower_case_table_names系统变量设置为1,则必须先将旧数据库和表名转换为小写,然后再停止mysqld并使用新变量设置重新启动它。