Sql 后来

Sql 后来,sql,case-sensitive,Sql,Case Sensitive,标识符可能被引用或未被引用的状态。如果两边都不带引号,则它们始终不区分大小写,例如table\u name==table\u name 但是,引用的标识符区分大小写,例如“table_name”!=“表格名称”。同样基于规范,如果您希望将未引用的标识符与带引号的标识符进行比较,那么如果未引用的字符是大写的,则可以认为未引用和带引号的标识符是相同的,例如TABLE_NAME==“TABLE_NAME”,但是TABLE_NAME!=“表格名称”或表格名称!=“表格名称” 以下是规范的相关部分(第5.

标识符可能被引用或未被引用的状态。如果两边都不带引号,则它们始终不区分大小写,例如
table\u name==table\u name

但是,引用的标识符区分大小写,例如
“table_name”!=“表格名称”
。同样基于规范,如果您希望将未引用的标识符与带引号的标识符进行比较,那么如果未引用的字符是大写的,则可以认为未引用和带引号的标识符是相同的,例如
TABLE_NAME==“TABLE_NAME”
,但是
TABLE_NAME!=“表格名称”
表格名称!=“表格名称”

以下是规范的相关部分(第5.2.13节):

13)A和A是等效的-
如果(带)的
用等号替换的小写字母-
借出大写字母)和的(所有出现的
替换为,所有出现的替换为),视为
重复指定一个
SQL_文本的设计与实现-
对大小写敏感的已定义排序规则,进行同等比较
根据第8.2款中的比较规则,“”。
请注意,与SQL标准的其他部分一样,并非所有数据库都完全遵循此部分。例如,PostgreSQL将所有不带引号的标识符存储为小写而不是大写,因此
table_name==“table_name”
(这与标准正好相反)。另外,有些数据库始终不区分大小写,或者区分大小写取决于数据库中的某些设置,或者取决于系统的某些属性,通常不管文件系统是否区分大小写


请注意,某些数据库工具可能会始终发送引用的标识符,因此在将某些工具生成的查询(如Liquibase或其他DB迁移工具生成的CREATE TABLE查询)与手工查询(如应用程序中的简单JDBC select)混合在一起的情况下,您必须确保这些情况是一致的,特别是在带引号和不带引号的标识符不同的数据库上(DB2、PostgreSQL等)

两者兼备


现在,您可以用小写字母编写所有sql语句,如果需要格式化,只需安装一个插件即可。这仅适用于代码编辑器具有这些插件的情况VSCode有许多扩展可以做到这一点

有些系统(如PostgreSQL)在表名和列名中区分大小写,但在查找它们之前,试图通过将所有名称小写或大写来隐藏它。在这些系统上,您必须将表名括在“双引号”中,以确保查找您输入的确切名称。“但通常都是用大写字母写的”我不同意,这只是首选项,我始终看到相反的情况,如果MS Sql server是使用区分大小写的排序规则安装的,那么表、列、,即使数据库具有不区分大小写的排序规则,变量名也会区分大小写。@BlackTigerX-Oracle手册中的所有示例SQL的关键字(SELECT、FROM、WHERE等)都是大写的,但表名和列名都是小写的。Hmmm,mysql是否仍然如此?我认为我有一个默认安装的mysql,它对列名不区分大小写。中间级别的SQL-92具有强制的大写SQL。在大多数RDBMS中,表名也不区分大小写。至少在默认情况下不是这样。MySQL是这个规则最突出的例外。在MySQL中,大小写不敏感是一个可以打开和关闭的选项。只是如果文件系统是区分大小写的(默认设置),那么这种不敏感就不会像您在Linux上假设的那样起作用。您必须在Linux上创建一个不区分大小写的文件系统,以便mysql不区分大小写与windows上的工作方式相同(=正确)。尤其是在以另一种模式进行某些工作后打开/关闭,可能会产生不良后果。
select cOL1, col2 FrOM taBLeName WheRE ...
SELECT * FROM foo;
select * from foo;
select * from FOO;
SELECT fieldName
FROM tableName;
SELECT "fieldName"
FROM "tableName";