我已经研究了很多,而且我理解为使数据库表名称敏感,你必须设置变量lower_case_table_names = 0。 我在osX上。我在my.cnf做了这个改变。 之后,如果我跑
select * from users
我得到了结果。如果我跑:
select * from Users
我收到错误,说表不存在。
但是,对于特定数据库,区分大小写不会影响。我可以使用任何我永远不会收到错误的情况。为什么?我可以看一下用于导入数据库的大sql文件,并试着找出是否有特定的指令来忽略区分大小写(?)。 无论如何,为什么你认为区分大小写适用于所有数据库而不是我感兴趣的那个?其中一个区分大小写的是InnoDB。虽然不关心这个的是MyIsam。可能是原因吗?在这种情况下有什么工作吗?
答案 0 :(得分:4)
MacOsx 10.13,码头工人 3.0.1。
将 lower_case_table_names 更改为 0 对我没有帮助。 Mysql报错
[ERROR] The server option ‘lower_case_table_names’ 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.
答案 1 :(得分: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
服务器变量(或设置):
其他参考文献:
答案 2 :(得分:3)
case sensitivity of database and table names取决于底层操作系统和文件系统。
在Windows上,他们不区分区分大小写。在Linux上,他们 区分大小写。
OSX处于中间位置; HFS
文件系统支持区分大小写和不区分大小写的文件名(但不是同时)。这取决于它的格式化。
答案 3 :(得分:0)
但是,对于特定数据库,区分大小写不具备 影响。我可以使用任何我永远不会收到错误的情况。为什么呢?
这是因为只使用不区分大小写的选项(默认情况下)创建了此数据库。首先需要在创建数据库之前将区分大小写的选项放在sql create script的顶部,这样DBMS就可以了。
答案 4 :(得分:0)
在/etc/mysql/my.cnf
通过添加以下行来编辑文件:
[mysqld]
lower_case_table_names=1
sudo /etc/init.d/mysql restart
您可能需要重新创建这些表才能使其正常工作
答案 5 :(得分:0)
mysql手册说明:
如果您计划在Unix上将lower_case_table_names系统变量设置为1,则必须先将旧数据库和表名转换为小写,然后再停止mysqld并使用新变量设置重新启动它。
答案 6 :(得分:0)
默认情况下,表别名在Unix上区分大小写,但在Windows或macOS上不区分大小写。而且您不能在OSX上强制执行此操作。
MySql文档给出以下建议:
为避免此类差异引起的问题,最好采用一致的约定,例如始终使用小写名称创建和引用数据库和表。建议使用此约定,以实现最大的可移植性和易用性。
在MySQL中,数据库对应于数据目录中的目录。数据库中的每个表都对应于数据库目录中的至少一个文件(可能还有更多文件,具体取决于存储引擎)。触发器也对应于文件。因此,基础操作系统的区分大小写在数据库,表和触发器名称的区分大小写中发挥了作用。这意味着这些名称在Windows中不区分大小写,但在大多数Unix版本中都区分大小写。 一个值得注意的例外是macOS,它基于Unix,但使用不区分大小写的默认文件系统类型(HFS +)。。但是,macOS还支持UFS卷,该卷也区分大小写。在任何Unix上。请参见第1.7.1节“ MySQL对标准SQL的扩展”。 lower_case_table_names系统变量还会影响服务器处理标识符区分大小写的方式,如本节稍后所述。
建议在所有系统上使用 lower_case_table_names = 1 ,但是这样做的缺点是,当您使用SHOW TABLES或SHOW DATABASES时,在原始情况下看不到名称。 / p>
变量 lower_case_table_names 默认情况下为0,这表示表名称按指定存储,并且比较区分大小写。
这是可能的值:
在Windows上,默认值为1。在macOS上,默认值为2。在Linux上,不支持值2。服务器将值强制改为0。
如果在数据目录位于不区分大小写的文件系统(例如Windows或macOS)上的系统上运行MySQL,则不应将lower_case_table_names设置为0。这是不受支持的组合,当使用错误的tbl_name字母大小写运行INSERT INTO ... SELECT ... FROM tbl_name操作时,可能导致挂起状态。使用MyISAM,使用不同的字母大小写访问表名称可能会导致索引损坏。
如果在不区分大小写的文件系统上尝试使用--lower_case_table_names = 0启动服务器,则会打印一条错误消息,并且服务器将退出。
您可以在my.cnf文件中进行更改,并且可以使用以下命令找到它(如果您使用的是基于unix的系统)
mysql --help | grep cnf
参考: