Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск с регистром / 6 сообщений из 6, страница 1 из 1
08.02.2016, 11:35:48
    #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
08.02.2016, 11:41:44
    #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
08.02.2016, 12:15:32
    #39165419
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск с регистром
В том-то и дело, что приведенный мной селект не из таблицы. Он выводит "1" или "0", выполнилось или нет. Он выводит "1", что неверно.
...
Рейтинг: 0 / 0
08.02.2016, 12:30:03
    #39165435
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск с регистром
Alexey Agafonov,

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

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


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

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

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


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