Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$' / 9 сообщений из 9, страница 1 из 1
06.03.2017, 15:32
    #39414809
sines
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
Здравствуйте!

Помогите, пожалуйста, решить проблему. В таблицу добавлены буквы русского алфавита. При запросе с REGEXP не выводятся буквы р-ю.

Например, запрос:

SELECT letter FROM `letters` WHERE `letter` REGEXP '^[а-я]+$'

выведет:

а
б
в
г
д
е
ж
з
и
й
к
л
м
н
о
п
я

Данные mysql:

character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8mb4
character_set_system utf8
collation_connection utf8mb4_general_ci
collation_database utf8mb4_unicode_ci
collation_server utf8mb4_unicode_ci

Почему идет пропуск букв и как это исправить? Спасибо.
...
Рейтинг: 0 / 0
06.03.2017, 16:52
    #39414877
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
sines,

Напрямую - увы, никак. REGEXP не работает с юникодом.
https://dev.mysql.com/doc/refman/5.7/en/regexp.html#operator_regexp 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.
Можно попробовать явно привести к однобайтовой кодировке функцией CONVERT() .
...
Рейтинг: 0 / 0
06.03.2017, 17:05
    #39414887
sines
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
miksoftsines,

Напрямую - увы, никак. REGEXP не работает с юникодом.
https://dev.mysql.com/doc/refman/5.7/en/regexp.html#operator_regexp 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.
Можно попробовать явно привести к однобайтовой кодировке функцией CONVERT() .

Спасибо. Посмотрю что можно сделать.

Наткнулся на "preg_match понимает не все русские буквы" http://ru.stackoverflow.com/questions/417568/preg-match-понимает-не-все-русские-буквы

Может сервер mysql понимает модификаторы?
...
Рейтинг: 0 / 0
06.03.2017, 18:37
    #39414952
sines
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
Понял, что REGEXP совсем не работает с многобайнтыми кодировками (сначала сопротивлялся). :)

Попробовал запрос SELECT `letter` from letters WHERE CONVERT(`letter` REGEXP '^[а-я]+$' USING cp1251), но не помогло. А если вся база будет в cp1251, то REGEXP '^[а-я]+$' должен сработать нормально?
...
Рейтинг: 0 / 0
08.03.2017, 02:29
    #39415754
sines
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
Перевел всю таблицу в кодировку cp1251 запросом:

ALTER TABLE `letters` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;

Теперь поиск стал полноценным, видны все буквы алфавита. Но пока не знаю с какими проблемами могу столкнуться в будущем из-за такой кодировки. Спасибо за помощь.
...
Рейтинг: 0 / 0
08.03.2017, 06:05
    #39415764
sines
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
Поспешил. Не выводится буква "ё". Ну да ладно. :)
...
Рейтинг: 0 / 0
08.03.2017, 09:39
    #39415785
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
sines,

а буква 1 сама по себе и не входит в а-я. Её надо указать отдельно [а-яё]
...
Рейтинг: 0 / 0
08.03.2017, 14:53
    #39415854
sines
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
Melkij, спасибо! Работает!
...
Рейтинг: 0 / 0
08.03.2017, 21:29
    #39415944
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
sinesПоспешил. Не выводится буква "ё". Ну да ладно. :)Буква Ё вообще не совсем обычная в MySQL.
См. Бесит Женёк (кодировки, cp1251, utf8, буква ё)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$' / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]