SQL语法区分大小写吗?

时间:2020-03-06 14:56:02  来源:igfitidea点击:

SQL区分大小写。我已经使用了MySQL和SQL Server,它们似乎都不区分大小写。总是这样吗?该标准是否定义区分大小写?

解决方案

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

我认为SQL Server不区分大小写,至少默认情况下不区分大小写。

当我通过Management Studio手动查询时,我总是把情况弄乱了,它乐意接受它:

select cOL1, col2 FrOM taBLeName WheRE ...

不。MySQL不区分大小写,SQL标准也不区分大小写。大写命令是一种常见的做法。

现在,如果我们正在谈论表/列名,那么是的,但不是命令本身。

所以

SELECT * FROM foo;

是相同的

select * from foo;

但与

select * from FOO;

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

这是关于名称区分大小写的MySQL页面

这是MSDN中有关MSSQL归类的文章

标识符和保留字不应该区分大小写,尽管许多人遵循惯例,保留字使用大写,标识符使用Pascal大小写。

参见SQL-92第2节。 5.2

在Sql Server中,这是一个选项。打开它很烂。

我不确定MySql。

我的理解是SQL标准要求不区分大小写。我不相信任何数据库都完全遵循该标准。

MySQL将配置设置作为其"严格模式"的一部分("严格模式"的抓包,使MySQL更加符合标准)区分大小写或者不区分大小写的表名。不管此设置如何,列名仍然不区分大小写,尽管我认为这会影响列名的显示方式。我相信此设置在RDBMS实例内的所有数据库中都是实例范围的,尽管我今天正在研究以确认这一点(希望答案是否定的)。

我喜欢Oracle如何更好地处理这一问题。在直接SQL中,表和列名之类的标识符不区分大小写。但是,如果出于某种原因我们确实希望获得显式的大小写,则可以将标识符括在双引号中(在Oracle SQL中,该双引号与用于封装字符串数据的单引号完全不同)。所以:

SELECT fieldName
FROM tableName;

将从表名查询字段名,但是

SELECT "fieldName"
FROM "tableName";

将从tableName查询fieldName。

我非常确定我们甚至可以使用此机制在标识符中插入空格或者其他非标准字符。

在这种情况下,如果出于某种原因我们希望使用显式区分大小写的表名和列名,则可以使用它,但是我仍然要特别注意这一点。

我每天使用Oracle时的约定是,在代码中,我将所有Oracle SQL关键字都大写,将所有标识符都小写。在文档中,我会将所有表名和列名都大写。做到这一点非常方便且易读(尽管有时在代码中键入这么多大写字母很麻烦-我敢肯定,在这里我可以找到一个编辑器功能来提供帮助)。

在我看来,MySQL在不同平台上对此有所区别特别不利。我们需要能够在Windows上转储数据库并将其加载到UNIX,如果Windows上的安装程序忘记将RDBMS置于区分大小写的模式,那么这样做将是一场灾难。 (公平地说,这是一场灾难的部分原因是很久以前,我们的编码人员就依赖于UNIX上的MySQL区分大小写做出了错误的决定。)编写Windows MySQL安装程序的人确实使它变得非常方便和实用。类似于Windows,向人们提供一个复选框表示"我们是否要打开严格模式并使MySQL更符合标准?"真是太棒了。但是,对于MySQL而言,与标准进行如此显着的区别非常方便,然后通过在不同的平台上转而与它自己的实际标准相区别,从而使情况变得更糟。我敢肯定,在不同的Linux发行版上,这可能会进一步复杂化,因为不同发行版的打包程序可能有时会合并他们自己的首选MySQL配置设置。

这是讨论SOD在RDBMS中是否需要区分大小写的另一个SO问题。

SQL关键字本身不区分大小写。

表,列等的名称具有区分大小写的能力,这取决于数据库,除非我们另有了解,否则我们可能应该假定它们区分大小写(在许多数据库中它们并非如此;在MySQL中,表名有时会区分大小写,但大多数其他名称不是)。

使用=,>,<等比较数据具有区分大小写的能力,这取决于在单个数据库,表甚至所涉及的列上使用的排序规则设置。但是,在数据库中保持排序规则相当一致是正常的。我们有几列需要存储区分大小写的值。他们有专门设置的排序规则。