sql >> Database teknologi >  >> RDS >> Mysql

Hvordan opdager man kinesisk karakter i MySQL?

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

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.




  1. ALTER TABLE fejl

  2. Hvordan konverterer man alle tabeller i databasen til én kollation?

  3. GROUP BY-adfærd, når der ikke er nogen aggregerede funktioner i SELECT-udtrykket

  4. Psychopg2-billede blev ikke fundet