在MySQL中,数据库与data目录中的目录相对应。数据库中的每个表都对应于数据库目录中的至少一个文件(可能还有更多文件,具体取决于存储引擎)。触发器也对应于文件。因此,基础操作系统的区分大小写在数据库,表和触发器名称的区分大小写中起作用。这意味着这些名称在Windows中不区分大小写,但在大多数Unix版本中都区分大小写。macOS是一个值得注意的例外,它是基于Unix的,但使用的是不区分大小写的默认文件系统类型(HFS +)。但是,macOS也支持UFS卷,这与任何Unix一样都区分大小写。
系统变量lower_case_table_names也影响服务器是否区分大小写。

注意
尽管数据库、表和触发器名称在某些平台上不区分大小写,但不应在同一语句中使用不同的大小写引用其中的一个。以下语句不起作用,因为它将表同时引用为my_table和MY_TABLE:

mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;

分区,子分区,列,索引,存储的例程,事件和资源组名称在任何平台上都不区分大小写,列别名也不区分大小写。

但是,日志文件组的名称区分大小写。这与标准SQL不同。

默认情况下,表别名在Unix上区分大小写,但在Windows或macOS上不区分大小写。以下语句在Unix上不起作用,因为它同时引用了as a和as 别名 A:

mysql> SELECT col_name FROM tbl_name AS a
       WHERE a.col_name = 1 OR A.col_name = 2;

但是,在Windows上允许使用相同的语句。为了避免由此类差异引起的问题,最好采用一致的约定,例如始终使用小写名称创建和引用数据库和表。建议使用此约定,以实现最大的可移植性和易用性。

表和数据库名称如何存储在磁盘上以及如何在MySQL中使用受lower_case_table_names系统变量的影响 。 lower_case_table_names可以采用下表中显示的值。