https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_lower_case_table_names
https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html
表和数据库名称在磁盘上的存储方式以及如何在MySQL中使用受lower_case_table_names
系统变量影响,您可以在启动mysqld时设置该 系统变量 。 lower_case_table_names
可以采用下表中显示的值。这个变量不 不影响触发标识符的情况下的灵敏度。在Unix上,默认值为 lower_case_table_names
0。在Windows上,默认值为1。在macOS上,默认值为2。
值 | 含义 |
---|---|
0 | 表和数据库名称使用CREATE TABLE or CREATE DATABASE 语句中指定的字母大小写存储在磁盘上。名称比较区分大小写。你应该不会,如果你有不区分大小写的文件名(如Windows或Mac系统)的系统上运行MySQL这个变量设置为0。如果--lower-case-table-names=0 在不区分大小写的文件系统上强制将此变量设置为0 并MyISAM 使用不同的字母大小写访问 表名,则可能导致索引损坏。 |
1 | 表名以小写形式存储在磁盘上,名称比较不区分大小写。MySQL在存储和查找时将所有表名都转换为小写。此行为也适用于数据库名称和表别名。 |
2 | 表名和数据库名使用CREATE TABLE or CREATE DATABASE 语句中指定的字母大小写存储在磁盘上,但是MySQL在查找时将它们转换为小写。名称比较不区分大小写。这仅适用于不区分大小写的文件系统! InnoDB 表名和视图名与一样以小写形式存储 lower_case_table_names=1 。 |
如果仅在一个平台上使用MySQL,通常不必lower_case_table_names
从默认值更改 变量。但是,如果要在文件系统区分大小写的平台之间传输表,可能会遇到困难。例如,在Unix上,可以有两个不同的表,分别命名为my_table
和 MY_TABLE
,但是在Windows上,这两个名称被认为是相同的。为避免数据库或表名的字母大写引起的数据传输问题,您有两种选择:
-
lower_case_table_names=1
在所有系统上 使用。这样做的主要缺点是,当您使用SHOW TABLES
或时SHOW DATABASES
,您不会在其原始字母大小写中看到名称。 -
使用
lower_case_table_names=0
在Unix和lower_case_table_names=2
Windows上。这样可以保留数据库名称和表名称的字母大小写。这样做的缺点是,必须确保您的语句在Windows上始终以正确的字母大小写引用数据库和表名。如果将语句转移到字母大写的Unix,则如果字母大写不正确,则它们将不起作用。例外:如果您使用
InnoDB
表,并且试图避免这些数据传输问题,则应lower_case_table_names
在所有平台上将其设置 为1,以强制将名称转换为小写。
---------------------------------------------------
linux默认是大小写区分的。
Windows或macOS默认是不支持大小写区分的,
在Unix上,默认值为 lower_case_table_names=0
在Windows上,默认值为1。在macOS上,默认值为2。
oracle
create table时,加了双引号,且表名为小写时,只能select * from "table"的方式查询,其他方式大小写都可以查询,navicat,sqldeveloper,sqlplus都可以大小写查出来