powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск с регистром
6 сообщений из 6, страница 1 из 1
Поиск с регистром
    #39165372
Alexey Agafonov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Мне нежно найти в базе те записи, в которых присутствует два и более заглавнх симпола подряд. Долгие тесты свел к простому запросу:
Код: sql
1.
select 'тест' COLLATE utf8_bin  REGEXP BINARY '[А-Я]{2,}' COLLATE utf8_bin


И он не работает, потому что проверка проходит. А не должна.

Если я приводу к кодироке Case Censitive, например, latin1_general_cs, пишет

Код: plaintext
1253 - COLLATION 'latin1_general_cs' is not valid for CHARACTER SET 'utf8'

Кто сталкивался, как сравнивать заглавные русские символы?
...
Рейтинг: 0 / 0
Поиск с регистром
    #39165382
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Agafonov,

В какой кодировке данные в таблице и в какой кодировке отправляется SQL-запрос?
Если все в utf8, то слова BINARY уже должно быть достаточно.

Правда, тут есть одна засада:
http://dev.mysql.com/doc/refman/5.7/en/regexp.html Warning

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.
...
Рейтинг: 0 / 0
Поиск с регистром
    #39165419
Alexey Agafonov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том-то и дело, что приведенный мной селект не из таблицы. Он выводит "1" или "0", выполнилось или нет. Он выводит "1", что неверно.
...
Рейтинг: 0 / 0
Поиск с регистром
    #39165435
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Agafonov,

если не попрет, можешь попробовать альтернативное решение -

( field like 'А%' or field like 'Б%' or ...)
and
( field like '_А%' or field like '_Б%' or... )


если индекса на поле нет, то не менее быстро будет, если есть, Может и быстрее.

в твоем варианте инде кс работать не будет все равно.
...
Рейтинг: 0 / 0
Поиск с регистром
    #39165487
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, с диапазоном почему-то не работает.
У меня только так заработало:
Код: sql
1.
REGEXP BINARY '[ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ]{2}'
...
Рейтинг: 0 / 0
Поиск с регистром
    #39165533
Alexey Agafonov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня еще так решилось

Код: sql
1.
select CONVERT('Тест' USING cp1251) REGEXP BINARY CONVERT('[А-Я]{2,}' USING cp1251 )
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск с регистром
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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