Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment détecter le caractère chinois dans MySQL ?

SELECT COUNT(*)
    FROM tbl
    WHERE HEX(col) REGEXP '^(..)*(E[2-9F]|F0A)'

comptera le nombre d'enregistrements avec des caractères chinois dans la colonne col .

Problèmes :

  • Je ne sais pas quelles plages d'hexagones représentent le chinois.
  • Le test peut comprennent le coréen et le japonais. ("CJC")
  • Dans MySQL, les caractères chinois de 4 octets nécessitent utf8mb4 au lieu de utf8 .

Élaboration

Je suppose que la colonne du tableau est CHARACTER SET utf8 . Dans le codage utf8, les caractères chinois commencent par un octet entre l'hexadécimal E2 et E9, ou EF, ou F0. Ceux commençant par l'hex E auront une longueur de 3 octets, mais je ne vérifie pas la longueur ; les F0 seront de 4 octets.

L'expression régulière commence par ^(..)* , signifiant "à partir du début de la chaîne (^ ), localisez 0 ou plus (* ) 2 caractères (.. ) valeurs. Après cela devrait être soit E -quelque chose ou F0A . Après cela, tout peut arriver. Le E-quelque chose est, plus précisément, E suivi de l'un des 2, 3, 4, 5, 6, 7, 8, 9 ou F.

Tiré au sort, je vois que encode comme les 3 octets hexadécimaux E88D89 , et 𠜎 encode comme les 4 octets hexadécimaux F0A09C8E .

Je ne connais pas de meilleur moyen de vérifier une chaîne pour une langue spécifique.

Comme vous l'avez constaté, le REGEXP peut être assez lent.

Cette expression rationnelle pourrait être excessive, dans la mesure où certains caractères non chinois peuvent être capturés.