MySQL“ LIKE”忽略俄语单词的结果

时间:2019-12-27 17:37:12

标签: mysql sql

我有一张西里尔字母标题的桌子。 LIKE似乎忽略了俄语中的某些单词。排序规则UTF8_general_ci。我尝试从php以及从PHPMyAdmin执行请求。可能是什么原因?

SELECT * FROM `table` WHERE `column` LIKE 'слово'

UPD:例如:http://sqlfiddle.com/#!9/30d904/1/0

3 个答案:

答案 0 :(得分:1)

尝试这样:

SELECT * FROM videos WHERE title LIKE '% все %'

只需在搜索字符串(单词)的开头和结尾添加%

例如。将'все'更改为'% все %'

Your Example

但是如果您希望它不区分大小写,那么

SELECT * FROM videos WHERE LOWER(title) LIKE LOWER('% все %')

Not case sensitive Example

答案 1 :(得分:1)

使用时

WHERE title LIKE 'все'

查询匹配等于'все'的标题,因为没有通配符的LIKE等效于=(可能区分大小写)。
但是,您希望标题包含 'все'一词,这意味着标题应该在列值内的任何位置,并在其前后加上一个空格(除非在开头或结尾处是空格) 。
因此,请像这样使用运算符LIKE

SELECT * FROM videos 
WHERE CONCAT(' ', title, ' ') LIKE '% все %'

请参见demo
结果:

| ID  | title                      | description | upload_time         | file_name                          | hosted | video_uri | play_count |
| --- | -------------------------- | ----------- | ------------------- | ---------------------------------- | ------ | --------- | ---------- |
| 539 | И все будет хорошо дай бог |             | 2019-12-17 05:01:25 | uploads/4766__все_будет_хорошо.mp4 | 1      | 379928030 | 1          |
| 566 | Да и вообще вы все молодцы |             | 2019-12-17 22:47:47 | uploads/7118__все_молодцы.mp4      | 0      |           | 0          |
| 614 | Ну это сразу все объясняет |             | 2019-12-20 09:19:04 | uploads/3522__это_сразу_все_.mp4   | 1      | 380654168 | 2          |

答案 2 :(得分:1)

SELECT * 
FROM videos 
WHERE LOWER(`title`) REGEXP '[[:<:]]все[[:>:]]'

http://sqlfiddle.com/#!9/62292ea/1

正则表达式模式适用于单词边界(空格,逗号等)以及字符串的开头。我应用了lower()函数以防止大小写不敏感。 因此它匹配“Всевгостикнам” ,但不匹配“Повсеместно”