SQL 和不区分大小写的条件

Posted

技术标签:

【中文标题】SQL 和不区分大小写的条件【英文标题】:SQL and Case Insensitive Conditions 【发布时间】:2011-10-12 20:26:27 【问题描述】:

我注意到在 mysql 中,WHERE x = 'Test' 之类的 where 子句无论大小写如何('TEST'、'test' 等)都会匹配

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

【问题讨论】:

@rabudde 我认为是这样,但我可以向你保证,查询匹配不敏感。 区分大小写取决于列的排序规则。 【参考方案1】:

它依赖的不是服务器,而是排序规则。大多数数据库将默认使用不区分大小写的排序规则,因此您可以假设这一点,但如果您遇到区分大小写的排序规则,则很容易更改。

【讨论】:

是否可以在单个字段的基础上进行敏感/非敏感排序规则?还是一刀切? 您不仅可以为特定列指定排序规则,还可以通过在必要时指定COLLATE collation_name 为特定比较指定排序规则。 您可以为每个 TEXT 类型(包括 VARCHAR 和 CHAR)的列指定单独的排序规则【参考方案2】:

Oracle 默认情况下对数据区分大小写 例如

select * from 'test';

不等于

select * from 'TEST';

自从我上次使用它们已经有一段时间了,但我似乎记得 Informix 区分大小写,我认为 Sybase 依赖于排序规则。

正如其他响应者指出的那样,SQL Server 依赖于排序规则。

所以我认为唯一真正的答案是它取决于 RDBMS

【讨论】:

【参考方案3】:

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

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

【讨论】:

您知道UPPER 是否是所有SQL 的标准吗?是否有我可以参考的标准功能/等列表?谢谢【参考方案4】:

你是对的,一般来说 sql 对字符串匹配是不区分大小写的,几乎所有服务器都这样。

这里有一篇文章展示了如何在需要时以不同方式进行区分大小写的匹配!

http://vyaskn.tripod.com/case_sensitive_search_in_sql_server.htm

【讨论】:

以上是关于SQL 和不区分大小写的条件的主要内容,如果未能解决你的问题,请参考以下文章

mysql模糊查询区分大小写的问题~~

如何在 Swift 中使用区分大小写和不区分大小写的混合字符串避免 Array 中的重复条目?

Pandas .str.replace 和不区分大小写

Oracle查询语句区分大小写吗?

关于sqlserver字符类型查询条件区分大小写

JPA - 带有in子句和不区分大小写的规范