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

Wie erkennt man chinesische Schriftzeichen in MySQL?

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 statt utf8 .

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.