Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> MySQL a MariaDB różnice w obsłudze wyrażeń regularnych
kaem
post
Post #1





Grupa: Zarejestrowani
Postów: 248
Pomógł: 38
Dołączył: 29.06.2008

Ostrzeżenie: (0%)
-----


Witam,
MariaDB to system oparty na mysql'u, jednak ich wyrażenia regularne oparte są na PCRE a w MySQL'u na POSIXIE . Więcej na:
https://mariadb.atlassian.net/browse/MDEV-7127.
Chciałbym utworzyć zapytanie korzystające z REGEXP, które będzie działało na tych dwóch systemach bazodanowych. Mam teraz z grubsza coś takiego:
  1. SELECT * FROM firmy
  2. WHERE (firmy.nazwa RLIKE '(^|\\x{20})\\x{22}{1}amica\\x{22}{1}($|\\x{20})'

Jednak na MySQL dostaję błąd "SQLSTATE[42000]: Syntax error or access violation: 1139 Got error 'repetition-operator operand invalid' from regexp' ". Wcześniej w tym zapytaniu zamiast szesnastkowych reprezentacji
znaków (\\x{20} oznacza np. spację; więcej tutaj) używałem character setów czyli, np.
  1. RLIKE '(^|[[.space.]]) ...

ale to z kolei powodowało na MariaDB błąd "POSIX collating elements are not supported". Jak z pierwszego zapytania usunę operatory powtórzeń, czyli w tym przypadku jeden {1} to nie ma błędu.
Ktoś ma jakiś pomysł jak używać takich wyrażeń żeby działało na MySQL oraz MariaDB?
Dodam że potrzebuję obsługi następujących znaków:

  1. // na potrzeby działania w MariaDB
  2. $change = array('.' => "\\\x{2E}",
  3. ',' => "\\\x{2C}",
  4. ' ' => "\\\x{20}",
  5. '(' => "\\\x{28}",
  6. ')' => "\\\x{29}",
  7. '[' => "\\\x{5B}",
  8. ']' => "\\\x{5D}",
  9. '^' => "\\\x{5E}",
  10. '$' => "\\\x{24}",
  11. '\\' => "\\\x{5C}",
  12. '/' => "\\\x{2F}",
  13. '<' => "\\\x{3C}",
  14. '>' => "\\\x{3E}",
  15. '"' => "\\\x{22}",
  16. ':' => "\\\x{3A}"
  17. );


  1. //wcześniej gdy system działał tylko na MySQL były tak jak pisałem character sety:
  2. $change = array('.' => "[[.period.]]",
  3. ',' => "[[.comma.]]",
  4. ' ' => "[[.space.]]",
  5. '(' => "[[.left-parenthesis.]]",
  6. ')' => "[[.right-parenthesis.]]",
  7. '[' => "[[.left-square-bracket.]]",
  8. ']' => "[[.right-square-bracket.]]",
  9. '^' => "[[.circumflex-accent.]]",
  10. '$' => "[[.dollar-sign.]]",
  11. '\\' => "[[.backslash.]]",
  12. '/' => "[[.slash.]]",
  13. '<' => "[[.less-than-sign.]]",
  14. '>' => "[[.greater-than-sign.]]",
  15. '"' => "[[.quotation-mark.]]",
  16. ':' => "[[.colon.]]"
  17. );
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 19:04