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

Comment identifier une langue dans la colonne utf-8 dans MySQL

Eh bien, commençons par un tableau que j'ai mis ici . Il dit, par exemple, que E381yy est l'encodage utf8 pour Hiragana et E383yy est Katakana (japonais). (Kanji est une autre affaire.)

Pour voir si une colonne utf8 contient Katakana, faites quelque chose comme

WHERE HEX(col) REGEXP '^(..)*E383'

Le cyrillique pourrait être

WHERE HEX(col) REGEXP '^(..)*D[0-4]'

Le chinois est un peu délicat, mais cela peut habituellement fonctionne pour le chinois (et le kanji ?) :

WHERE HEX(col) REGEXP '^(..)*E[4-9A]'

(Je vais changer votre titre pour éviter le mot-clé "jeu de caractères".)

Europe occidentale (y compris, mais sans s'y limiter, la France) C[23] , turc (environ, et quelques autres) (C4|C59) , grec :C[EF] , hébreu :D[67] , indien, etc :E0 , arabe/farsi/persan/ourdou :D[89AB] . (Toujours préfixer avec ^(..)* .

Vous remarquerez peut-être que ceux-ci ne sont pas nécessairement très spécifiques. C'est à cause des chevauchements. L'anglais britannique et l'anglais américain ne peuvent être distingués que par l'orthographe de quelques mots. Plusieurs lettres accentuées sont partagées de diverses manières en Europe. L'Inde a de nombreux jeux de caractères différents :devanagari, bengali, gurmukhi, gujarati, etc.; ceux-ci sont probablement distinguables, mais il faudrait plus de recherche. Je pense que l'arabe/farsi/persan/ourdou partagent un jeu de caractères.

Encore plus :

| SAMARITAN                     | E0A080        | E0A0BE        |
| DEVANAGARI                    | E0A480        | E0A5BF        |
| BENGALI                       | E0A681        | E0A7BB        |
| GURMUKHI                      | E0A881        | E0A9B5        |
| GUJARATI                      | E0AA81        | E0ABB1        |
| ORIYA                         | E0AC81        | E0ADB1        |
| TAMIL                         | E0AE82        | E0AFBA        |
| TELUGU                        | E0B081        | E0B1BF        |
| KANNADA                       | E0B282        | E0B3B2        |
| MALAYALAM                     | E0B482        | E0B5BF        |
| SINHALA                       | E0B682        | E0B7B4        |
| THAI                          | E0B881        | E0B99B        |
| LAO                           | E0BA81        | E0BB9D        |
| TIBETAN                       | E0BC80        | E0BF94        |

Donc, pour DEVANAGARI, '^(..)*E0A[45]'