Mysql класс символов не работает для арабского текста столбца - PullRequest
0 голосов
/ 25 мая 2018

Определение класса символов [...] mySQL соответствует любому символу в квадратных скобках.Так что я использовал его для арабских символов.И это дает мне пустой набор каждый раз.Вот мой запрос:

select hadith_raw_ar from view_hadith_in_book where hadith_raw_ar like '%[بل]ت';

Я был бы очень признателен за любую помощь, если когда-либо. Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Используйте коллекцию utf8_general_ci для вставки любых языковых символов

0 голосов
/ 30 мая 2018

В более старых версиях нельзя использовать классы символов с наборами символов LIKE или RLIKE и нелатинских символов 1.(По крайней мере, нет, и ожидайте получить правильный результат.)

REGEXP хромает.Смотрит только на байты;6 байтов в вашем классе персонажа, некоторые из которых дублируются.Вот гекс: D8 AA D8 A8 D9 84.

Иногда у вас случится , чтобы получить 'правильный' ответ от REGEXP.MariaDB имеет приличный REGEXP.Например, SELECT '٪' REGEXP '[تبل]'; возвращает true.Обратите внимание, что я проверяю арабский знак процента - hex D9AA.Обратите внимание, как я выбрал D9, который существует в некоторых арабских символах и AA.

Руководство по MySQL 8.0 подразумевает, что REGEXP может работать правильно для арабского языка.(Но не для эмодзи и некоторых китайских иероглифов.) MariaDB имеет встроенную функцию PCRE с 10.0.5.

0 голосов
/ 25 мая 2018

Будьте определением, класс символов mySQL [...] соответствует любому символу в скобках.

Умм, это неточно.Класс символов на самом деле является частью Regex, , а не MySQL .Тем не менее, вы все равно можете использовать Regex с MySQL, но вам нужно использовать ключевое слово REGEXP вместо LIKE.

Теперь, если вы пытаетесь сопоставить что-либо, начинающееся с любого символапредставленный в вашем классе персонажей, вы должны использовать шаблон регулярных выражений, похожий на ^[...], где вы заменяете ... на нужные символы.

Итак, в вашем случае вам нужно что-токак это:

SELECT hadith_raw_ar FROM view_hadith_in_book WHERE hadith_raw_ar REGEXP '^[تبل]';

Что эквивалентно:

SELECT  hadith_raw_ar 
FROM    view_hadith_in_book 
WHERE   hadith_raw_ar LIKE 'ت%' OR 
        hadith_raw_ar LIKE 'ب%' OR
        hadith_raw_ar LIKE 'ل%';

.. когда не используется Regex.


Ссылки:

...