【问题标题】:How to perform a case sensitive search on a case insensitive MySQL database?如何在不区分大小写的 MySQL 数据库上执行区分大小写的搜索?
【发布时间】:2011-08-10 19:49:08
【问题描述】:

在我的utf8_general_ci 数据库中,99.99% 的搜索应该不区分大小写。现在有一种特殊情况,我需要以区分大小写的方式查找一些数据。该字段是一个 varchar 字段,我通常不区分大小写。

我的问题是:我可以对通常不区分大小写的字段执行区分大小写的搜索吗?

【问题讨论】:

    标签: mysql sql collation case-sensitive


    【解决方案1】:

    您可以使查询区分大小写, 例如,如果您想检查用户名和密码:

    Select * from TableName Where WHERE LoginId=@userid COLLATE SQL_Latin1_General_CP1_CS_AS AND Password=@password COLLATE SQL_Latin1_General_CP1_CS_AS
    

    它检查用户 ID 和密码,如果它们为真则返回值(区分大小写)。

    【讨论】:

      【解决方案2】:

      从页面中选择 * where convert(pageTitle using latin1) collat​​e utf8_ = 'Something'

      我发现 this answer 描述性足够 :)

      【讨论】:

      • 好的,但是(未知排序规则:'utf8_')不起作用,所以我将其更改为FROM `table` WHERE convert(`collumn` using latin1) COLLATE latin1_general_cs LIKE '%wOrd'
      • 其实我只是从那个答案中复制过来的……仅供参考
      • 这会导致性能问题,但由于您仅在 0.01% 的情况下使用它 :) 我认为这对您来说并不重要……如果您找到更好的解决方案,请更新我们。
      • 使用 utf8 的示例可以是“SELECT * FROM my_table WHERE CONVERT(my_value USING utf8) COLLATE utf8_general_ci LIKE '%Something%'”
      【解决方案3】:

      我建议更改排序规则类型,使其区分大小写,然后在 99.99% 的其他情况下更改您的代码。有关更改字段检查大小写的信息:http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

      一旦字段类型设置为区分大小写,您就可以在 SQL 中使用 LOWER()UPPER() 函数来标准化不区分大小写的搜索。

      【讨论】:

      • 请注意,如果存在,LOWER/UPPER 将使列上的索引不可用。
      • 这并不能真正回答我的问题。为了清楚起见,我编辑了我的问题。恐怕现阶段无法返回并更改所有代码,并且我的列已编入索引并且需要不敏感,因此 OMG Ponies 评论对我来说是一个真正的风险。
      • 我明白了,在那种情况下,我会选择@ankur.singh 的答案
      【解决方案4】:

      您必须使用 COLLATE 运算符更改搜索查询中使用的操作数的排序规则

      如果您希望列始终 以区分大小写的方式处理, 声明它区分大小写或 二进制排序规则。

      请看这里http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

      【讨论】:

      • 这看起来不错,但是 mysql 手册并不清楚在哪里将这个 COLLATE 应用于表中的 SELECT 语句
      • SELECT name FROM table WHERE CONVERT(name USING utf8) COLLATE utf8_general_cs LIKE "%anne%";注意 _cs 后缀。
      • #1273 - Unknown collation: 'utf8_general_bin' 谢谢,我用了 latin1 然后它工作了
      猜你喜欢
      • 1970-01-01
      • 2013-09-26
      • 2013-02-17
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 2011-04-13
      相关资源
      最近更新 更多