【问题标题】:Like search is case sensitive?像搜索一样区分大小写?
【发布时间】:2013-06-26 07:33:58
【问题描述】:

我有一个这样的查询,在一个表上执行,其中有几个关键字逗号分隔在字段 keywords 中,前导和尾随逗号:

SELECT media_id, filename FROM media WHERE keywords LIKE '%,house,%'

但是,它什么也找不到(该表中有几千条记录,其中相当多的记录有关键字"House")。即使搜索'%,House,%' 也找不到任何东西。

有效的方法是在所有大写字母中进行类似搜索:

SELECT media_id, filename FROM media WHERE keywords LIKE '%,HOUSE,%'

现在它还会找到像House 这样的关键字。

表格和keywords列的排序规则是latin1_german1_ci

这种行为从何而来?
如何获得通常的完全不区分大小写的行为?

【问题讨论】:

  • 关键字字段的排序规则是什么?
  • 请显示该表的“CREATE TABLE”输出。
  • @Vatev 表和列的排序规则是latin1_german1_ci
  • 逗号分隔值可以使用FIND_IN_SET

标签: mysql select innodb sql-like case-sensitive


【解决方案1】:

当需要区分大小写时,我会经常LOWER(keywords) like ('%house%')

【讨论】:

    【解决方案2】:

    您可以更改列的排序规则,也可以像这样进行转换:

    SELECT media_id, filename FROM media WHERE keywords LIKE '%,house,%' COLLATE utf8_general_ci

    【讨论】:

    • 据我了解,_ci 排序规则是 case insensitive,latin1_german1_ci 就是其中之一。不是吗?
    【解决方案3】:

    非常愚蠢和无法解决的问题。

    我将 orand 之类的关键字扩展为实际的查询逻辑,即使它们在预处理脚本中的一个单词中,所以搜索 handsome 将扩展为 h && some

    对不起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-26
      • 2012-01-31
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2010-09-15
      • 2013-09-26
      相关资源
      最近更新 更多