我的SQL查询
SELECT keyword
FROM table
WHERE MATCH (keyword)
AGAINST ('eco*' IN BOOLEAN MODE);
使用以下单词匹配单元格:economy
,ecology
,echoscopy
(为什么?),echo
(为什么?)等。
其他SQL查询
SELECT keyword
FROM table
WHERE MATCH (keyword)
AGAINST ('eci*' IN BOOLEAN MODE);
将单元格与单词echidna
匹配。
然而两个查询都与单词ectoplasm
不匹配。
为什么echo
,echoscopy
匹配'eco*'
和echidna
匹配'eci*'
?
我认为这个问题的关键因素是字母组合“ ch ”。
为什么它以这种方式工作?如何避免这种匹配?
答案 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%';