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

Помогите, пожалуйста, решить проблему. В таблицу добавлены буквы русского алфавита. При запросе с 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
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
    #39414877
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
    #39414887
sines
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
    #39414952
sines
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял, что REGEXP совсем не работает с многобайнтыми кодировками (сначала сопротивлялся). :)

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

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

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

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


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