Доброго времени суток, Сообщество!
Есть необходимость пользоваться регулярными выражениями в mysql запросах. Пока поля в таблицах были все в utf8 все было нормально. Но появилась необходимость пользоваться регулярными выражениями для полей ucs2. Там ясное дело Эти выражения уже не подходят. и я озадачен что мне делать
Вот например есть такая таблица
CREATE TABLE IF NOT EXISTS `urls` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`url` varchar(2112) COLLATE ucs2_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=ucs2 COLLATE=ucs2_bin AUTO_INCREMENT=1 ;
Надо выбрать url-ы в которых встречаетяс vk.com. Для простоты пока покажу на примере LIKE.
SELECT * FROM `urls` WHERE `url` LIKE '%vk.com%'
Возвращает пустой результат. А вот следующий запрос уже показывает что нужно
SELECT * FROM `urls` WHERE `url` LIKE '%v\0k\0.\0c\0o\0m\0%'
Но для лайка такой костыль еще проконает, а вот для REGEXP уже ясное дело нет. Как можно выкрутиться из подобной ситуации? Можно ли в запросе как-то конвертировать само регулярное выражение или поменять правила сравнения. Или единственный выход — переписать регулярные выражения? Регулярные выражения на данный момент приблизительно такие.
/some=([a-zA-Zа-яА-ЯёЁ0-9]+)/u
Заранее благодарен за внимание.
Здравствуйте, furang, Вы писали:
F>Есть необходимость пользоваться регулярными выражениями в mysql запросах. Пока поля в таблицах были все в utf8 все было нормально. Но появилась необходимость пользоваться регулярными выражениями для полей ucs2.
Для начала расскажите о причинах, побудивших вас хранить ucs-2 в базе данных.
http://www.utf8everywhere.org/
F>SELECT * FROM `urls` WHERE `url` LIKE '%v\0k\0.\0c\0o\0m\0%'
Какой character set вы используете для общения с базой по умолчанию и почему не тот, в котором все строки в базе? (Если у вас в базе строки хранятся в нескольких разных кодировках, срочно к врачу.)
Если connection charset менять нежелательно, попробуйте указать
charset литерала, используемого в операциях LIKE или REGEXP:
F>SELECT * FROM urls WHERE url LIKE _ucs2'%vk.com%' COLLATE ucs2_bin