sql >> Databáze >  >> RDS >> Mysql

Jak mohu v MySQL dotazovat na text obsahující znaky v asijských jazycích?

Teoreticky byste mohli udělat toto:

  1. Najděte rozsahy Unicode, které chcete otestovat.
  2. Ručně zakódujte začátek a konec do UTF-8.
  3. Jako rozsah pro REGEXP použijte první bajt každého zakódovaného začátku a konce.

Domnívám se, že rozsah CJK je natolik vzdálený věcem, jako je symbol eura, že falešně pozitivních a falešně negativních bude málo nebo žádné.

Upravit: Nyní jsme uvedli teorii do praxe!

Krok 1: Vyberte rozsah znaků. Navrhuji \u3000-\u9fff; snadno se testuje a měl by nám poskytnout téměř dokonalé výsledky.

Krok 2: Kódovat do bajtů. (stránka Wikipedie utf-8)

Pro námi zvolený rozsah budou hodnoty kódované utf-8 vždy 3 bajty, z nichž první je 1110xxxx, kde xxxx jsou nejvýznamnější čtyři bity hodnoty unicode.

Chceme tedy machovat bajty v rozsahu 11100011 až 11101001 nebo 0xe3 až 0xe9.

Krok 3: Vytvořte náš regulární výraz pomocí velmi praktické (a mnou právě objevené) funkce UNHEX.

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

Jen jsem to zkusil. Funguje jako kouzlo. :)



  1. Jak vytvořit databázi localhost pomocí mysql?

  2. Vrácení výstupu skriptu Python CGI MySQL

  3. Mysql výběr ze dvou tabulek

  4. Django prefetch_related s limitem