淘先锋技术网

首页 1 2 3 4 5 6 7

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_names0。在Windows上,默认值为1。在macOS上,默认值为2。

含义
0表和数据库名称使用CREATE TABLEor CREATE DATABASE语句中指定的字母大小写存储在磁盘上。名称比较区分大小写。你应该不会,如果你有不区分大小写的文件名(如Windows或Mac系统)的系统上运行MySQL这个变量设置为0。如果--lower-case-table-names=0 在不区分大小写的文件系统上强制将此变量设置为0 并MyISAM使用不同的字母大小写访问 表名,则可能导致索引损坏。
1表名以小写形式存储在磁盘上,名称比较不区分大小写。MySQL在存储和查找时将所有表名都转换为小写。此行为也适用于数据库名称和表别名。
2表名和数据库名使用CREATE TABLEor 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=2Windows上。这样可以保留数据库名称和表名称的字母大小写。这样做的缺点是,必须确保您的语句在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都可以大小写查出来