SELECT COUNT(*)
FROM tbl
WHERE HEX(col) REGEXP '^(..)*(E[2-9F]|F0A)'
zählt die Anzahl der Datensätze mit chinesischen Schriftzeichen in Spalte col
.
Probleme:
- Ich bin mir nicht sicher, welche Hex-Bereiche Chinesisch darstellen.
- Der Test kann gehören Koreanisch und Japanisch. ("CJK")
- In MySQL benötigen chinesische 4-Byte-Zeichen
utf8mb4
stattutf8
.
Ausarbeitung
Ich gehe davon aus, dass die Spalte in der Tabelle CHARACTER SET utf8
ist . Bei der utf8-Codierung beginnen chinesische Schriftzeichen mit einem Byte zwischen Hex E2 und E9 oder EF oder F0. Diejenigen, die mit Hex E beginnen, sind 3 Bytes lang, aber ich überprüfe die Länge nicht; die F0-Einsen sind 4 Bytes.
Der reguläre Ausdruck beginnt mit ^(..)*
, was "vom Anfang der Zeichenfolge (^
), suchen Sie 0 oder mehr (*
) 2-stellig (..
) Werte. Danach sollte entweder E
stehen -etwas oder F0A
. Danach kann alles passieren. Das E-etwas ist genauer gesagt E
gefolgt von 2,3,4,5,6,7,8,9 oder F.
Zufällig ausgewählt, sehe ich diesen 草
codiert als 3 Hex-Bytes E88D89
, und 𠜎
codiert als 4 Hex-Bytes F0A09C8E
.
Ich kenne keinen besseren Weg, um einen String auf eine bestimmte Sprache zu überprüfen.
Wie Sie festgestellt haben, kann REGEXP ziemlich langsam sein.
Dieser reguläre Ausdruck könnte übertrieben sein, da einige nicht-chinesische Zeichen erfasst werden könnten.