首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL语法是否区分大小写?

SQL语法是否区分大小写?
EN

Stack Overflow用户
提问于 2008-09-30 16:49:05
回答 8查看 252K关注 0票数 224

SQL是否区分大小写。我使用过MySQL和SQL Server,它们似乎都是区分大小写的。一直都是这样吗?该标准是否定义了区分大小写?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-09-30 16:52:16

SQL关键字不区分大小写(SELECTFROMWHERE等),但通常全部大写。但是,在某些设置中,表名和列名区分大小写。MySQL有一个配置选项来启用/禁用它。通常,在Linux上,区分大小写的表名和列名是默认的,而在MySQL上,不区分大小写的名称曾经是默认的,但现在安装程序会在安装过程中询问这个问题。对于MSSQL,它是数据库排序规则设置的函数。

这是MySQL page about name case-sensitivity

这是article in MSDN about collations for MSSQL

票数 208
EN

Stack Overflow用户

发布于 2008-09-30 16:50:35

这不是严格意义上的SQL语言,但是在SQL Server中,如果数据库排序规则区分大小写,那么所有表名都区分大小写。

票数 24
EN

Stack Overflow用户

发布于 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节):

代码语言:javascript
复制
     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等)。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/153944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档