在MySQL中,数据库对应操作系统数据目录中的目录,数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名以及表名的大小写敏感性。这说明在大多数Unix中数据库名和表名对大小写敏感,而在windows中对大小写不敏感。

    列、索引、存储子程序和触发器名在任何平台对大小写不敏感,列的别名也不敏感。

对于类Unix系统:

  • 数据库名和表名是严格区分大小写的

  • 表的别名是严格区分大小写的

  • 列名与列别名在所有情况下均是忽略大小写的

  • 变量名也是严格区分大小写的


对于win系统:

  • 全部不区分大小写


    MySQL如何在硬盘上保存和使用表名和数据库名,是由lower_case_tables_name系统变量确定,可以在启动mysqld时设置。

  • If set to 0, table names are stored as specified and comparisons are case sensitive.

  • If set to 1, table names are stored in lowercase on disk and comparisons are not case sensitive.

  • If set to 2, table names are stored as given but compared in lowercase. This option also applies to database names and table aliases.

Unix平台上默认lower_case_tables_name=0


MySQL在查询或者字符串比较的时候,也是大小写不敏感的。可以指定 BINARY关键字以区分大小写。


如果只在一个平台上使用MySQL,通常不需要更改lower_case_tables_name 变量。然而,如果你想要在对大小写敏感不同的文件系统的平台之间转移表,会遇到问题。


命名规范

    为了避免大小写引发的问题,一种推荐的命名规则是:在定义数据库/表/列的时候全部采用小写字母+下划线形式,不使用任何大写字母。

    如果你使用InnoDB引擎,在任何平台上均应用lower_case_tables_name=1,以强制将名转换为小写。请注意在Unix系统中将lower_case_tables_name设置为1之前,重启mysqld之前,必须先将原来的数据库名以及表名全部转换为小写。