不管对象是不是大小写敏感,很多时候是由操作系统决定的。
基于 Unix 的操作系统都是大小写敏感的,Windows 操作系统不是大小写敏感,Mac OS X 操作系统通常不是大小写敏感的,但是如果Mac 操作系统使用了 UFS 磁盘卷,那么这个时候是大小写敏感。
数据库的数据库名称,表名称,表别名和触发器名称都和操作系统的大小写敏感有关。但是索引名称,列名称,列别名,存储过程和事件名称永远都不会是大小写敏感的。
日志文件的 Group 名称也是大小写敏感的。
lower_case_table_names 服务器系统变量在这里扮演关键角色。这个变量决定了表名称,别名和数据库名称是不是大小写敏感的。如果这里设置为 0(在基于 Unix 的操作系统中,默认设置为 0),表名称,表别名,数据库名称被认为是大小写敏感的。
如果这里设置为 1 (Windows 操作系统中默认设置为 1),名称被存储为小写,那么这里被认为是大小写不敏感的。
如果这里设置为 2 (Mac OS X 操作系统中默认设置为 2), 名称被存储为一个申明,但是并不认为与小写等价。
因此,在基于 Unix 的操作环境下,可以让系统像 Windows 表现一样忽略大小写,但是反过来却不可以,因为 Windows 操作系统的底层文件系统不支持这样。
尽管在大小写不敏感的操作系统中,你依然要求在你的 SQL 脚本中使用相同的大小写字符,下面的语句在执行的时候会出现错误,这是因为系统认为表名是不同的。
SELECT * FROM a_table WHERE A_table.id>10;