SQL区分大小写吗?我用过MySQL和SQL Server,它们似乎都是不区分大小写的。情况总是这样吗?标准是否定义了区分大小写?
当前回答
标识符和保留词不应该区分大小写,尽管许多标识符遵循一个约定,即保留词使用大写,标识符使用驼峰大小写。
参见SQL-92第5.2节
其他回答
SQL关键字是不区分大小写的(SELECT, FROM, WHERE等),但它们通常都是大写的。但是,在某些设置中,表名和列名是区分大小写的。
MySQL有一个配置选项来启用/禁用它。通常区分大小写的表和列名是Linux MySQL的默认值,不区分大小写曾经是Windows的默认值,但现在安装程序在安装过程中询问这一点。对于SQL Server,它是数据库排序规则设置的函数。
这里是关于名称区分大小写的MySQL页面
下面是MSDN中关于SQL Server排序规则的文章
我不认为SQL Server是区分大小写的,至少默认情况下不是。
当我通过SQL Server Management Studio手动查询时,我总是搞砸情况,它很高兴地接受它:
select cOL1, col2 FrOM taBLeName WheRE ...
我发现这篇博文很有帮助(我不是作者)。总结(请阅读):
带分隔符的标识符区分大小写("table_name" != "table_name"),而不带引号的标识符则不区分大小写,并且转换为大写(table_name => table_name)。
他发现DB2、Oracle和Interbase/Firebird是100%兼容的:
PostgreSQL……每个不带引号的标识符都要小写,而不是大写。MySQL……依赖于文件系统。SQLite和SQL Server…表和字段名的大小写在创建时被保留,但在创建后将完全忽略。
我的理解是,SQL标准要求不区分大小写。不过,我不相信任何数据库都完全遵循标准。
MySQL有一个配置设置,作为它的“严格模式”(使MySQL更符合标准的几个设置的集合)的一部分,用于区分大小写或不敏感的表名。不管这个设置如何,列名仍然是不区分大小写的,尽管我认为它会影响列名的显示方式。我相信这个设置是实例级的,横跨RDBMS实例中的所有数据库,尽管我今天正在研究以确认这一点(并希望答案是否定的)。
我更喜欢甲骨文的处理方式。在直接SQL中,表名和列名等标识符是不区分大小写的。然而,如果出于某种原因,您确实希望获得显式的大小写,您可以将标识符包含在双引号中(在Oracle SQL中,双引号与用于包含字符串数据的单引号有很大不同)。所以:
SELECT fieldName
FROM tableName;
将从表名查询字段名,但是
SELECT "fieldName"
FROM "tableName";
将从tableName中查询fieldName。
我非常确定您甚至可以使用这种机制在标识符中插入空格或其他非标准字符。
在这种情况下,如果出于某种原因,您发现显式大小写表名和列名是可取的,那么您可以使用它,但这仍然是我要高度警告的。
当我每天使用Oracle时,我的习惯是在代码中,我将所有Oracle SQL关键字都大写,所有标识符都小写。在文档中,我将所有表和列名都用大写。这样做是非常方便和易读的(尽管有时在代码中键入如此多的大写字母是一种痛苦——我相信我可以在这里找到一个编辑器功能来帮助)。
In my opinion MySQL is particularly bad for differing about this on different platforms. We need to be able to dump databases on Windows and load them into Unix, and doing so is a disaster if the installer on Windows forgot to put the RDBMS into case-sensitive mode. (To be fair, part of the reason this is a disaster is our coders made the bad decision, long ago, to rely on the case-sensitivity of MySQL on UNIX.) The people who wrote the Windows MySQL installer made it really convenient and Windows-like, and it was great to move toward giving people a checkbox to say "Would you like to turn on strict mode and make MySQL more standards-compliant?" But it is very convenient for MySQL to differ so significantly from the standard, and then make matters worse by turning around and differing from its own de facto standard on different platforms. I'm sure that on differing Linux distributions this may be further compounded, as packagers for different distros probably have at times incorporated their own preferred MySQL configuration settings.
下面是另一个Stack Overflow问题,讨论在RDBMS中是否需要区分大小写。
标识符和保留词不应该区分大小写,尽管许多标识符遵循一个约定,即保留词使用大写,标识符使用驼峰大小写。
参见SQL-92第5.2节
推荐文章
- 选项(RECOMPILE)总是更快;为什么?
- 设置数据库从单用户模式到多用户
- oracle中的RANK()和DENSE_RANK()函数有什么区别?
- 的类型不能用作索引中的键列
- SQL逻辑运算符优先级:And和Or
- 如何检查一个表是否存在于给定的模式中
- 添加一个复合主键
- 如何在SQL Server Management Studio中查看查询历史
- 可以为公共表表达式创建嵌套WITH子句吗?
- 什么时候我需要在Oracle SQL中使用分号vs斜杠?
- SQL Server的NOW()?
- 在SQL中,count(列)和count(*)之间的区别是什么?
- 在SQL Server中截断(不是四舍五入)小数位
- 仅在Datetime列上按日期分组
- PostgreSQL通配符LIKE用于单词列表中的任何一个