SQL是否区分大小写。我使用过MySQL和SQL Server,它们似乎都是区分大小写的。一直都是这样吗?该标准是否定义了区分大小写?
发布于 2008-09-30 16:52:16
SQL关键字不区分大小写(SELECT
、FROM
、WHERE
等),但通常全部大写。但是,在某些设置中,表名和列名区分大小写。MySQL有一个配置选项来启用/禁用它。通常,在Linux上,区分大小写的表名和列名是默认的,而在MySQL上,不区分大小写的名称曾经是默认的,但现在安装程序会在安装过程中询问这个问题。对于MSSQL,它是数据库排序规则设置的函数。
发布于 2008-09-30 16:50:35
这不是严格意义上的SQL语言,但是在SQL Server中,如果数据库排序规则区分大小写,那么所有表名都区分大小写。
发布于 2013-11-12 23:27:29
SQL92 specification声明标识符可以加引号,也可以不加引号。如果两端都没有引号,则它们始终不区分大小写,例如table_name == TAble_nAmE
。
但是,带引号的标识符区分大小写,例如"table_name" != "TAble_naME"
。同样基于规范如果您希望将未加引号的标识符与带引号的标识符进行比较,那么如果未加引号的字符是大写的,例如TABLE_NAME == "TABLE_NAME"
,但TABLE_NAME != "table_name"
或TABLE_NAME != "TAble_NaMe"
,则未加引号的标识符和带引号的标识符可以被认为是相同的。
以下是规范的相关部分(第5.2.13节):
13)A <regular identifier> and a <delimited identifier> are equiva-
lent if the <identifier body> of the <regular identifier> (with
every letter that is a lower-case letter replaced by the equiva-
lent upper-case letter or letters) and the <delimited identifier
body> of the <delimited identifier> (with all occurrences of
<quote> replaced by <quote symbol> and all occurrences of <dou-
blequote symbol> replaced by <double quote>), considered as
the repetition of a <character string literal> that specifies a
<character set specification> of SQL_TEXT and an implementation-
defined collation that is sensitive to case, compare equally
according to the comparison rules in Subclause 8.2, "<comparison
predicate>".
请注意,与SQL标准的其他部分一样,并非所有数据库都完全遵循这一节。例如,PostgreSQL存储所有未加引号的标识符,小写而不是大写,因此table_name == "table_name"
(这与标准正好相反)。此外,一些数据库始终不区分大小写,或者区分大小写取决于数据库中的某些设置,或者取决于系统的一些属性,通常是文件系统是否区分大小写。
请注意,一些数据库工具可能会一直发送引用的标识符,因此在将某些工具生成的查询(如Liquibase或其他DB迁移工具生成的CREATE TABLE查询)与手动查询(如应用程序中的简单JDBC select )混合使用时,必须确保这些情况是一致的,尤其是在带引号和未带引号的标识符不同的数据库上(DB2、PostgreSQL等)。
https://stackoverflow.com/questions/153944
复制相似问题