SQL 是否区分大小写?我使用了 MySQL 和 SQL Server ,它们似乎都不区分大小写。总是这样吗?标准是否定义区分大小写?
原文由 Steve T 发布,翻译遵循 CC BY-SA 4.0 许可协议
SQL 是否区分大小写?我使用了 MySQL 和 SQL Server ,它们似乎都不区分大小写。总是这样吗?标准是否定义区分大小写?
原文由 Steve T 发布,翻译遵循 CC BY-SA 4.0 许可协议
SQL-92 规范 声明标识符可以被引用,也可以不被引用。如果双方都未引用,则它们始终不区分大小写,例如 table_name == TAble_nAmE
。
但是,引用的标识符区分大小写,例如 "table_name" != "TAble_naME"
。同样基于规范,如果您希望将不带引号的标识符与带引号的标识符进行比较,则可以将不带引号和带引号的标识符视为相同,如果不带引号的字符是大写的,例如 TABLE_NAME == "TABLE_NAME"
,但是 TABLE_NAME != "table_name"
或 TABLE_NAME != "TAble_NaMe"
。
这是规范的相关部分(第 5.2.13 节):
和 是等价的,如果 的 (每个小写字母被等效的大写字母或字母替换)和 < 的 delimited identifier body>(所有出现的 被替换,所有出现的被 替换),被认为是 指定 SQL_TEXT 的 和对大小写敏感的实现定义的排序规则,根据第 8.2 节“ ”中的比较规则进行同等比较。
请注意,就像 SQL 标准的其他部分一样,并非所有数据库都完全遵循本节。例如,PostgreSQL 将所有未引用的标识符存储为小写而不是大写,因此 table_name == "table_name"
(这与标准完全相反)。还有一些数据库一直不区分大小写,或者区分大小写取决于数据库中的某些设置或取决于系统的某些属性,通常是文件系统是否区分大小写。
请注意,某些数据库工具可能会一直发送引用的标识符,因此在您将某些工具生成的查询(如 Liquibase 或其他数据库迁移工具生成的 CREATE TABLE 查询)与手工查询(如简单的 JDBC 选择在您的应用程序中)您必须确保案例是一致的,尤其是在带引号和不带引号的标识符不同的数据库上( DB2 , PostgreSQL 等)
原文由 SztupY 发布,翻译遵循 CC BY-SA 4.0 许可协议
SQL 关键字不区分大小写(
SELECT
、FROM
、WHERE
等),但它们通常全部大写。但是,在某些设置中,表名和列名区分大小写。MySQL 有一个配置选项来启用/禁用它。通常区分大小写的表名和列名是 Linux MySQL 上的默认值,不区分大小写曾经是 Windows 上的默认值,但现在安装程序在安装过程中询问了这一点。对于 SQL Server ,它是数据库排序规则设置的函数。
这是 关于名称区分大小写的 MySQL 页面
这是 MSDN 中关于 SQL Server 排序规则的文章