SQL区分大小写吗?我用过MySQL和SQL Server,它们似乎都是不区分大小写的。情况总是这样吗?标准是否定义了区分大小写?
当前回答
在SQL Server中,这是一个选项。打开它太糟糕了。
我不确定MySQL。
其他回答
这不是严格的SQL语言,但在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节
推荐文章
- 在SQL Server 2008 R2中重命名数据库时出错
- 将数据复制到另一个表中
- 如何在SQL中选择表的最后一条记录?
- SQL在Oracle中连接多行列值的查询
- 在单个查询中计算空值和非空值
- 在存储过程中使用“SET XACT_ABORT ON”有什么好处?
- SQL to LINQ工具
- 如何从一个查询插入多行使用雄辩/流利
- 如何连接列在Postgres选择?
- MySQL中的表名是否区分大小写?
- 有人可以对SQL查询进行版权保护吗?
- 如何知道MySQL表最近一次更新?
- 如何转储一些SQLite3表的数据?
- 如何创建一个SQL Server函数“连接”多行从一个子查询到一个单独的分隔字段?
- 在MySQL中的一个查询中更新多个具有不同值的行