SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 31.03.2016 15:12:25

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Странное поведение REGEXP '[№]'

Собственно запрос

SELECT 'ТЕСТ - Ж'
FROM  dual
WHERE 'Ж' COLLATE utf8_unicode_ci REGEXP '[№]';
Дает положительный результат. Это же относится и к "Ф". Может и на других символах, все не проверял.
Странное, как по мне, поведение. Или это проблема только у меня?

Неактивен

 

#2 03.04.2016 03:59:53

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Странное поведение REGEXP '[№]'

MySQL использует библиотеку, которая ничего не знает про кодировки (в документации есть про это предупреждение: The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multibyte safe and may produce unexpected results with multibyte character sets. In addition, these operators compare characters by their byte values and accented characters may not compare as equal even if a given collation treats them as equal). Соответственно, когда Вы запихиваете в [] последовательность байт, регулярное выражение ищет любой из этих байт в исходной строке (в данном примере — 0x96, 0x84 или 0xE2).

> SELECT 'Ж' REGEXP '[№]', 'Ж' REGEXP '№', UNHEX('96') REGEXP '[№]', HEX('Ж'), HEX('№');
+---------------------+-------------------+----------------------------+-----------+------------+
| 'Ж' REGEXP '[№]'    | 'Ж' REGEXP '№'    | UNHEX('96') REGEXP '[№]'   | HEX('Ж')  | HEX('№')   |
+---------------------+-------------------+----------------------------+-----------+------------+
|                   1 |                 0 |                          1 | D096      | E28496     |
+---------------------+-------------------+----------------------------+-----------+------------+
1 row in set (0,00 sec)

Неактивен

 

#3 03.04.2016 08:05:39

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Странное поведение REGEXP '[№]'

Спасибо!
"Радует", что это не только у меня и удручает такое решение от разработчиков MySql.
Есть ли обходные пути решения? Что-то планируется в дальнейшем для "понимания" библиотекой кодировки символов?

Неактивен

 

#4 03.04.2016 09:05:25

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Странное поведение REGEXP '[№]'

Пока неизвестно. Напишите, что вам это важно в багтрекер:
http://bugs.mysql.com/bug.php?id=30241

В багтрекере предложен обходной вариант: использовать библиотеку UDF lib_mysqludf_preg:
https://github.com/mysqludf/lib_mysqludf_preg#readme

Неактивен

 

#5 03.04.2016 14:19:18

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Странное поведение REGEXP '[№]'

Спасибо!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson