Theoretisch könnten Sie dies tun:
- Finden Sie die Unicode-Bereiche, die Sie testen möchten.
- Kodieren Sie Anfang und Ende manuell in UTF-8.
- 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. :)