【问题标题】:MySQL query BOOLEAN MODE Case SensitivityMySQL 查询 BOOLEAN MODE 区分大小写
【发布时间】:2011-11-29 23:17:56
【问题描述】:

我的搜索区分大小写,但我希望它不区分大小写。在 MySQL 中,我将数据库和表设置为 utf8_general_ci。搜索仍然区分大小写。我一直在做一些研究,这背后的原因似乎是我的查询中的BOOLEAN MODE。有没有办法让它不区分大小写?所以无论我如何输入任何敏感的单词,它总是会在搜索结果中显示它?

SELECT 
        s_cost_sheet.partnumber,
        s_cost_sheet.description,
        s_cost_sheet.price,
        s_cost_sheet.notes

    FROM s_cost_sheet
    WHERE MATCH ( partnumber, description, price, notes ) 
    AGAINST('%".$search."%' IN BOOLEAN MODE) ORDER BY partnumber, description, price, notes ASC";

我已经在 phpMyAdmin 中测试了搜索,无论输入什么单词 plate,它都可以正常工作,它可以是 Plate、PLATE、plaTE。一切正常,所以一定是其中的某些东西导致了问题。

【问题讨论】:

  • 列呢?它们也在 utf8_general_ci 中吗?
  • 是的,它们也设置为 utf8_general_ci
  • 我认为没有双引号应该可以正常工作。为什么要使用百分号?
  • 带有“.search.”它仍然区分大小写。我提取结果,但前提是我使用精确的灵敏度。例如。我正在搜索盘子,但结果不会显示,因为它是作为盘子输入的。所以我必须搜索 Plate 才能显示出来。我希望它无论如何都能找到任何单词(PLATE、plate、Plate、PLate 等)。我如何拥有它,它应该可以工作,所以我不明白为什么它不工作的问题

标签: mysql search case-insensitive


【解决方案1】:

如果其中一列是 int 或 numeric 类型,则搜索将区分大小写。也不需要在搜索到的字符串中使用 %

【讨论】:

  • 是的,这是正确的。我将它们全部更改为 VARCHAR,而不是使用 2 列作为十进制。谢谢!
【解决方案2】:

尝试将您的表和列更改为utf8_general_ci,您不必将% 通配符与FULL TEXT Search 一起使用

建议 如果您需要更快的结果,还应避免使用带有ORDER BY 子句的大量列。

【讨论】:

  • 我将表和列设置为 utf8_general_ci,它仍然以这种方式运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2011-12-13
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 2013-04-25
相关资源
最近更新 更多