Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich in MySQL nach Text mit asiatischen Zeichen suchen?

Theoretisch könnten Sie dies tun:

  1. Finden Sie die Unicode-Bereiche, die Sie testen möchten.
  2. Kodieren Sie Anfang und Ende manuell in UTF-8.
  3. Verwenden Sie das erste Byte jedes codierten Starts und Endes als Bereich für einen REGEXP.

Ich glaube, dass der CJK-Bereich weit genug von Dingen wie dem Euro-Symbol entfernt ist, dass die falsch positiven und falsch negativen Ergebnisse wenige oder gar keine sind.

Bearbeiten: Wir haben die Theorie jetzt in die Praxis umgesetzt!

Schritt 1: Wählen Sie den Zeichenbereich. Ich schlage vor \u3000-\u9fff; leicht zu testen und sollte uns nahezu perfekte Ergebnisse liefern.

Schritt 2: In Bytes codieren. (Wikipedia utf-8-Seite)

Für unseren gewählten Bereich sind utf-8-codierte Werte immer 3 Bytes, von denen das erste 1110xxxx ist, wobei xxxx die höchstwertigen vier Bits des Unicode-Werts sind.

Daher wollen wir Bytes im Bereich von 11100011 bis 11101001 oder 0xe3 bis 0xe9 bearbeiten.

Schritt 3: Machen Sie unseren regulären Ausdruck mit der sehr praktischen (und gerade von mir entdeckten) UNHEX-Funktion.

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

Habe es gerade ausprobiert. Klappt wunderbar. :)