我有一张西里尔字母标题的桌子。 LIKE
似乎忽略了俄语中的某些单词。排序规则UTF8_general_ci
。我尝试从php以及从PHPMyAdmin执行请求。可能是什么原因?
SELECT * FROM `table` WHERE `column` LIKE 'слово'
答案 0 :(得分:1)
尝试这样:
SELECT * FROM videos WHERE title LIKE '% все %'
只需在搜索字符串(单词)的开头和结尾添加%
。
例如。将'все'
更改为'% все %'
。
但是如果您希望它不区分大小写,那么
SELECT * FROM videos WHERE LOWER(title) LIKE LOWER('% все %')
答案 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()函数以防止大小写不敏感。 因此它匹配“Всевгостикнам” ,但不匹配“Повсеместно”