SELECT COUNT(*)
FROM tbl
WHERE HEX(col) REGEXP '^(..)*(E[2-9F]|F0A)'
vil tælle antallet af poster med kinesiske tegn i kolonne col
.
Problemer:
- Jeg er ikke sikker på, hvilke hex-intervaller der repræsenterer kinesisk.
- Testen kan omfatter koreansk og japansk. ("CJK")
- I MySQL skal 4-byte kinesiske tegn
utf8mb4
i stedet forutf8
.
Udarbejdelse
Jeg antager, at kolonnen i tabellen er CHARACTER SET utf8
. I utf8-kodning begynder kinesiske tegn med en byte mellem hex E2 og E9, eller EF eller F0. Dem der starter med hex E vil være 3 byte lange, men jeg tjekker ikke længden; F0 dem vil være 4 bytes.
Det regexp starter med ^(..)*
, hvilket betyder "fra begyndelsen af strengen (^
), find 0 eller flere (*
) 2-tegn (..
) værdier. Derefter skal enten være E
-noget eller F0A
. Herefter kan alt ske. E-noget er mere specifikt E
efterfulgt af en af 2,3,4,5,6,7,8,9 eller F.
Udtaget tilfældigt ser jeg den 草
koder som de 3 hex bytes E88D89
og 𠜎
koder som de 4 hex bytes F0A09C8E
.
Jeg kender ikke en bedre måde at kontrollere en streng for et bestemt sprog.
Som du fandt ud af, kan REGEXP være ret langsom.
Dette regexp kan være over-kill, idet nogle ikke-kinesiske karakterer kan blive fanget.