SQL和大小写不敏感条件

5

我发现在MySQL中,像WHERE x = 'Test'这样的where子句会忽略大小写('TEST'、'test'等都可以匹配)。

在使用PDO时,是否可以假设大多数数据库服务器也是如此?例如,如果我使用MSSQL或Oracle,是否也是这种情况?


@rabudde 我也曾这样想,但我可以向您保证查询是不区分大小写的。 - Lea Hayes
大小写敏感取决于列的排序规则。 - Karolis
4个回答

8

这并不取决于服务器,而是取决于字符集。大多数数据库默认使用不区分大小写的字符集,因此您可以假设如此,但如果遇到一个区分大小写的字符集,更改它很容易。


在个别字段上是否可以有敏感/非敏感排序规则?还是整体适用? - Lea Hayes
1
您不仅可以为特定列指定排序规则,还可以通过在必要时指定“COLLATE collation_name”来为特定比较指定排序规则。 - Michael Mior
1
您可以为每个TEXT类型的列(包括VARCHAR和CHAR)指定单独的排序规则。 - Paul

1

SQL Server 默认情况下不区分大小写。在 SQL Server 中,您可以使用排序规则来进行区分大小写的比较,请参见这里

Oracle 默认区分大小写。您可以使用“UPPER”语句执行不区分大小写的搜索,请参见这里


你知道 UPPER 函数是否是所有 SQL 的标准吗?有没有可以用作参考的标准函数列表等?谢谢。 - Lea Hayes

1

Oracle默认情况下对数据大小写敏感,例如:

select * from 'test';

不等于

select * from 'TEST';

已经有一段时间没有使用它们了,但我似乎记得 Informix 是区分大小写的,而 Sybase 则可能取决于排序规则。

正如其他回答者所指出的那样,SQL Server 取决于排序规则。

因此,我认为唯一真正的答案是取决于关系数据库管理系统。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接