/ / Escaping String literals в REGEXP с MySQL - Java, MySQL, mariadb

Избягване на струнни буквали в REGEXP с MySQL - java, mysql, mariadb

Имате сложен проблем тук.

Да речем, че имам таблица "книги", която има колона "заглавие". И аз имам един ред с "title" = "MyBook".

Искам да използвам REGEXP търсене за заглавие на книгата и искам да цитирам всички низа за търсене в последователност:

SELECT * FROM books WHERE title REGEXP "\QMyBook\E";

Когато работя с mariaDB, моята заявка работи добре. DB разпознава тези кавички. Но когато работя с обикновен MySql, тази заявка не връща нищо. Проблемът не е в обратната наклонена черта, мисля, че MySql имат проблеми с работата с "Q" и "E". Може би има начин да направя целта си по друг начин, но аз наистина не искам да избягам от всеки герой поотделно.

Изпълнявам тази заявка от java. Но обикновена заявка от конзолата работи по същия начин

Проблемът е - наистина е необходимо да се използва REGEXP (не LIKE) оператор поради някои причини.

Но аз не искам тази заявка с regexp specialтук работят символи (например "My.ook"). Имам нужда от всеки низ, с или без regexp специални символи, обработени от mysql като буквална последователност (ако преминем "точка" - търсим "точка", а не за "всеки символ")

Отговори:

-1 за отговор № 1

Не мисля, че това може да стане с обикновен MySQL, но ако надстроите до MariaDB, можете да използвате синтаксиса, който искате.

Моля, вижте документацията на MariaDB за повече информация: https://mariadb.com/kb/en/mariadb/pcre/#quoting

SELECT * FROM books WHERE title REGEXP "\QMyBook\E";

Препоръчвам ви да преминете към MariaDB поради следните причини:

  • Всичко, което е работило в MySQL работи в MariaDB
  • Можете да се свържете от всеки клиент с MariaDB, без да променяте нищо от конфигурацията на MySQL (това наистина е подмяна на MySQL)
  • MariaDB не е собственост на голяма компания, която може да иска да таксува функции в бъдеще
  • MariaDB идва с много подобрения, включително много повече функции REGEXP, като тази, която искате, и REGEXP_REPLACE, наред с други подобрения.

Този списък не е изчерпателен.