This is a read-only copy of the MariaDB Knowledgebase generated on 2024-12-22. For the latest, interactive version please visit https://mariadb.com/kb/.

标识符对大小写敏感的情况

不管对象是不是大小写敏感,很多时候是由操作系统决定的。

基于 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;

有关完全的命名规范,请参考 命名规则 页面中的相关内容。

Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.