我有以下查询
SELECT *
FROM `keywords`
WHERE name LIKE '%ba%'
ORDER BY LOCATE( 'ba', name ) , name
LIMIT 0 , 30
此查询应按侧面keywords.name中“ba”的显示对结果进行排序。但是,我在一些特殊的字符上得到一些奇怪的行为:如果 - 例如 - 我有Ghurabā这个词的查询 像%ba%会找到它。但是,似乎locate(Ghurabā,ba)将返回0 - 意味着在字符串中找不到模式
任何想法如何克服这个问题?
p.s
- 一些有用的数据:
上述查询的结果:
Ghurabā'
Khuṭabā'
qabā\
里巴特
ba'urchi(厨师)
巴格达 ...
请注意,它适用于“常规英文字符”,但是喜欢和定位功能之间存在不匹配
使用Collcation:utf8_general_ci(与utf_unicode_ci得到相同的结果) mysql:受影响的版本mysql 5.5 / 5.6(可能更低)
修改
上面查询的预期结果应该是这样的 “
巴格达
ba'urchi(厨师)
qabā\
里巴特
Ghurabā'
Khuṭabā'
注意:按照ab
距离单词开头的顺序排序,然后按名称排序
...