Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak mogę wyszukać tekst zawierający znaki azjatyckie w MySQL?

Teoretycznie możesz to zrobić:

  1. Znajdź zakresy Unicode, które chcesz przetestować.
  2. Ręcznie zakoduj początek i koniec w UTF-8.
  3. Użyj pierwszego bajtu każdego zakodowanego początku i końca jako zakresu dla REGEXP.

Uważam, że zakres CJK jest wystarczająco odległy od takich rzeczy jak symbol euro, że liczba fałszywych trafień i fałszywie ujemnych wyników będzie niewielka lub żadna.

Edytuj: Teraz zastosowaliśmy teorię w praktyce!

Krok 1: Wybierz zakres znaków. Proponuję \u3000-\u9fff; łatwe do przetestowania i powinno dać nam niemal doskonałe wyniki.

Krok 2: Zakoduj w bajtach. (strona Wikipedii utf-8)

Dla wybranego przez nas zakresu wartości zakodowane w UTF-8 zawsze będą miały 3 bajty, z których pierwszy to 1110xxxx, gdzie xxxx to najbardziej znaczące cztery bity wartości Unicode.

Dlatego chcemy dopasować bajty w zakresie od 11100011 do 11101001 lub od 0xe3 do 0xe9.

Krok 3: Utwórz nasze wyrażenie regularne za pomocą bardzo przydatnej (i właśnie odkrytej przeze mnie) funkcji UNHEX.

SELECT * FROM `mydata`
WHERE `words` REGEXP CONCAT('[',UNHEX('e3'),'-',UNHEX('e9'),']')

Po prostu to wypróbowałem. Działa jak marzenie. :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zagnieżdżony JSON z 3 tabel jeden-do-wielu

  2. Czy istnieje sposób na wsteczne tworzenie UUID opartego na czasie/węźle w PHP?

  3. Błąd „Masz już użyteczne połączenie” w programie Visual Studio 2015 podczas dodawania źródła danych

  4. Policz liczbę zapytań MySQL wykonanych na stronie

  5. Debug PDO mySql wstaw NULL do bazy danych zamiast pustego