Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso eseguire query per testo contenente caratteri in lingua asiatica in MySQL?

In teoria potresti farlo:

  1. Trova gli intervalli Unicode per i quali desideri eseguire il test.
  2. Codifica manualmente l'inizio e la fine in UTF-8.
  3. Utilizza il primo byte di ogni inizio e fine codificati come intervallo per un REGEXP.

Credo che la gamma CJK sia abbastanza lontana da cose come il simbolo dell'euro che i falsi positivi e i falsi negativi sarebbero pochi o nessuno.

Modifica: Ora abbiamo messo in pratica la teoria!

Passaggio 1: Scegli la gamma di caratteri. Suggerisco \u3000-\u9fff; facile da testare e dovrebbe darci risultati quasi perfetti.

Passaggio 2: Codifica in byte. (Pagina Wikipedia utf-8)

Per il nostro intervallo scelto, i valori codificati utf-8 saranno sempre 3 byte, il primo dei quali è 1110xxxx, dove xxxx è i quattro bit più significativi del valore unicode.

Pertanto, vogliamo mach byte nell'intervallo da 11100011 a 11101001 o da 0xe3 a 0xe9.

Passaggio 3: Crea la nostra regexp usando la utilissima (e appena scoperta da me) funzione UNHEX.

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

Appena provato. Funziona come un incantesimo. :)