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
utf8mb4i 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.