SQL 语句的大小写规则与语句组成元素、引用内容和服务器所使用的操作系统有关。
1. SQL 关键字和函数名
SQL 的关键字和函数名不区分大小写。
2. 数据库名、表名和视图名
MySQL 用服务器主机的底层文件系统所包含的目录和文件来表示数据库和表。因此,数据库名和表名的默认大小写取决于服务器主机的操作系统在命名方面的规定。
比如 Windows 系统 的文件名不区分大小写,所以运行在 Windows 系统上面的 MySQL 服务器也不用区分数据库名和表名的大小写。Linux 系统的文件名区分大小写,所以运行在 Linux 系统上的 MySQL 服务器需要区分数据库名和表名的大小写。对于 Mac OS X 平台,其文件系统中的名字是个例外,它们不区分大小写。
MySQL 会使用一个文件来表示一个视图,所以以上与表有关的也同样适用于视图。
注意:默认情况下,表的别名要区分大小写。SQL 语句中可以使用任意的大小写(大写、小写或大小写混用)来指定一个别名。如果需要在同一条语句里多次用到同一个别名,则必须让它们的大小写保持一致。
3. 存储程序的名字
存储函数、存储过程和事件的名字都不区分大小写。触发器的名字要区分大小写,这一点与标准 SQL 的行为有所不同。
4. 列名和索引名
在 MySQL 里,列名和索引名都不区分大小写。
下面用一个表格总结一下SQL 元素在 Windows 和 Linux 系统是否区分大小写:
Windows | Linux | |
---|---|---|
数据库名 | 否(忽略大小写) | 是 |
表名 | 是 | |
表别名 | 是 | |
列名 | 否(忽略大小写) | |
列别名 | 否(忽略大小写) | |
变量名 | 是 |
在阿里巴巴 Java 开发手册的 MySql 建表规约里提到:
【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。
通俗的说就是,MySQL 在 Windows 系统下不区分大小写,但在 Linux 系统下默认区分大小写。因此,数据库名、表名和字段名,都不允许出现任何大写字母,避免节外生枝。