Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Помогите, пожалуйста, решить проблему. В таблицу добавлены буквы русского алфавита. При запросе с 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 Почему идет пропуск букв и как это исправить? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 15:32 |
|
||
|
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
|
|||
|---|---|---|---|
|
#18+
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() . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 16:52 |
|
||
|
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
|
|||
|---|---|---|---|
|
#18+
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 понимает модификаторы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 17:05 |
|
||
|
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
|
|||
|---|---|---|---|
|
#18+
Понял, что REGEXP совсем не работает с многобайнтыми кодировками (сначала сопротивлялся). :) Попробовал запрос SELECT `letter` from letters WHERE CONVERT(`letter` REGEXP '^[а-я]+$' USING cp1251), но не помогло. А если вся база будет в cp1251, то REGEXP '^[а-я]+$' должен сработать нормально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 18:37 |
|
||
|
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
|
|||
|---|---|---|---|
|
#18+
Перевел всю таблицу в кодировку cp1251 запросом: ALTER TABLE `letters` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci; Теперь поиск стал полноценным, видны все буквы алфавита. Но пока не знаю с какими проблемами могу столкнуться в будущем из-за такой кодировки. Спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2017, 02:29 |
|
||
|
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
|
|||
|---|---|---|---|
|
#18+
Поспешил. Не выводится буква "ё". Ну да ладно. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2017, 06:05 |
|
||
|
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
|
|||
|---|---|---|---|
|
#18+
sines, а буква 1 сама по себе и не входит в а-я. Её надо указать отдельно [а-яё] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2017, 09:39 |
|
||
|
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
|
|||
|---|---|---|---|
|
#18+
Melkij, спасибо! Работает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2017, 14:53 |
|
||
|
Не выводится часть букв русского алфавита при REGEXP '^[а-я]+$'
|
|||
|---|---|---|---|
|
#18+
sinesПоспешил. Не выводится буква "ё". Ну да ладно. :)Буква Ё вообще не совсем обычная в MySQL. См. Бесит Женёк (кодировки, cp1251, utf8, буква ё) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2017, 21:29 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39414809&tid=1830864]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
34ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 263ms |
| total: | 417ms |

| 0 / 0 |
