奇怪的全文MySQL搜索结果,需要一个解释

时间:2010-08-31 12:25:22

标签: mysql full-text-search

我的SQL查询
SELECT keyword
FROM table
WHERE MATCH (keyword)
AGAINST ('eco*' IN BOOLEAN MODE);

使用以下单词匹配单元格:economyecologyechoscopy(为什么?),echo(为什么?)等。

其他SQL查询
SELECT keyword
FROM table
WHERE MATCH (keyword)
AGAINST ('eci*' IN BOOLEAN MODE);

将单元格与单词echidna匹配。

然而两个查询都与单词ectoplasm不匹配。

为什么echoechoscopy匹配'eco*'echidna匹配'eci*'

我认为这个问题的关键因素是字母组合“ ch ”。

为什么它以这种方式工作?如何避免这种匹配?

3 个答案:

答案 0 :(得分:1)

问题(功能?)在整理中。由于utf8_lithuanian_ci整理,“c”和“ch”被视为相同。

编辑:

将排序规则更改为utf8_unicode_ci仅修复某些问题。

真正的解决方案是使用 utf8_bin ,它匹配每个字符的二进制值,这意味着它是:

  • 区分大小写
  • 变音符敏感

答案 1 :(得分:0)

匹配的原因是MATCH ... AGAINST正在使用正则表达式,而*表示前面的char(“o”)可以在0到9999999999999999999 ^次之间。您想要匹配的是

eco.*

将匹配“eco”和“eco”而不是“echo”。

eco.+

将匹配“生态”和“生态系统”而不是“生态”和“回声”。

答案 2 :(得分:-1)

也许你可以试试这个

SELECT keyword FROM table WHERE keyword LIKE 'eco%';