MySQL регулярное выражение для Emoji / Unicode - PullRequest
0 голосов
/ 08 декабря 2018

Я хочу найти в моей базе данных любую строку, которая содержит Emoji Бабочки - ? - используя regexp.

Например

SELECT *
     FROM   `table`
     WHERE  `text`
     REGEXP '?'

Я использую REGEXP потому что я могу захотеть найти Hello[[:space:]]world или подобное.

Я получаю ошибку

Ошибка "Ничего не повторяется со смещением 0" из регулярного выражения

Это работает:

SELECT *
     FROM   `table`
     WHERE  `text`
     LIKE   '%?%'

Но тогда я теряю способность искать, скажем, flying[[:space:]]?

Мое сопоставление utf8mb4_unicode_ci.База данных 10.0.36-MariaDB

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018
SHOW VARIABLES LIKE 'char%';

Похоже, вы не сказали MySQL, какую кодировку клиент использует для символов.Лучше всего это сделать с помощью параметров подключения или mysqli_charset (если используется mysqli, а не PDO).

Кроме того, запустите его в вашей версии:

SELECT 'ab' REGEXP '?';

Я подозреваю, что это будетвыдает то же сообщение об ошибке.

0 голосов
/ 08 декабря 2018

Честно говоря, я не знаю почему, но спасение вашей бабочки даст желаемый результат.(По крайней мере, в моей версии MariaDB 10.3.10, которая выдавала ту же ошибку без экранирования).

SELECT * FROM `table` WHERE `text` REGEXP '\\?'

(обратите внимание на двойной обратный слеш, первый - экранированный обратный слеш в строке, приводящий крегулярное выражение \?)

...