MySQL en UTF-8 et Affichage Idéogrammes Chinois

Créé : Samedi 29 Octobre 2011 00:37:00
Mise à jour : Vendredi 29 Juin 2018 21:51:53

Le client natif MySQL est configuré par défaut natif en caractères ISO-Latin1. Jusqu'à aujourd'hui, les OS unix en général et aussi les programmes de console tels que MsDos, MySQL client natif (mysql.exe) ne sont pas encore intrinsèquement en Unicode. Les caractères chinois ne sont pas immediatement affichés par défaut.

Le client natif MySQL est une commande qui s'exécute par interpéteur de commande nommé Shell. Ils sont deux tyquement, l'un Linux/Unix à travers une session SSH distante par PuTTY à partir du système Windows 7 par exemple. L'autre MsDOS ou une fenêtre interactive cmd.exe sous Windows.

En Linux, afin de visualiser les fichiers encodés en charset=UTF-8, qu'il s'agit du texte Chinois Simplifié ou de l'Arabe, il faut configurer aux deux bouts: Linux et Windows Seven.

Côté Linux

Il faut installer les locales UTF8, les polices de caractères Chinois.

  1. Générer les Locales UTF-8 dans Linux

    • Connectez-vous à votre serveur Linux en SSH par PuTTY avec le compte root ou via un autre compte administrateur.
    • Lancez la commande
      # dpkg-reconfigure locales
      .
    • Sélectionnez les locales qu'il vous faut pour vos langues multi-octet.
      Pour sélectionner, il faut taper la barre [ESPACE] dans la case. Dans mon cas pour le Chinois Simplifié, avec un peu de luxe, il me faut sélectionner:

      en_US ISO-8859-1
      zh_CN GB2312
      zh_CN.GBK GBK
      zh_CN.UTF-8 UTF-8

      Vous pouvez également valider l'option All locales. Là vous aurez toutes les locales disponibles, mais elles vont prendre quelques dizaines de Mo de disque dur chez votre hébergeur et cela prendra quelques minutes.
  2. Installer les Polices Chinoises UTF-8 dans Linux

    • Un fois les locales acquises dans votre OS Linux, il faut encore ajouter les polices de caractères UTF-8 dans votre serveur. Sur la toile parmi les polices chinoises gratuites disponibles pour les systèmes Unix il y a le lot arphic, un éditeur tawanais, nous avons besoin de ceux-ci:

      ttf-arphic-gbsn00lp (AR PL SungtiL GB)
      ttf-arphic-gkai00mp (AR PL KaitiM GB)
      ttf-arphic-bsmi00lp (AR PL Mingti2L Big5)
      ttf-arphic-bkai00mp (AR PL KaitiM Big5)

      Pour installer ces fontes, il faut lancer la commande
      # apt-get install ttf-arphic-bkai00mp ttf-arphic-bsmi00lp ttf-arphic-gbsn00lp ttf-arphic-gbsn00lp
      . Ce qui aboutira à des fichiers bkai00mp.ttf bsmi00lp.ttf gbsn00lp.ttf dans le répertoire /usr/share/fonts/truetype/arphic, elles sont suffisantes pour afficher les caractères chinois simplifiés.
  3. Vous êtes fin prèt côté Linux Debian 5 (Lenny).

    • Le fichier de test joint utf8sample.txt est en UTF-8 sans BOM. Quand on tape la commande unix
      # vi utf8sample.txt
      voici le texte chinois: Nous voyons qu'il y a encore quelque chose qui bloque, les idéogrammes en Unicode envoyés par SSH Linux sont affichés par Windows on ASCII Latin-1.

Côté Windows 7, Windows Vista, Windows XP

Windows moderne est par défaut conforme à la norme UTF-8, il n'y a rien à faire sur les Locales sous Windows. Même pas pour les polices de caractères, car une police UTF-8 est installée par défaut: Arial sous Windows Microsoft. La police de caractère Arial peut faire l'affaire, bien qu'elle ne soit pas idéale, car elle n'est pas d'un pitch constant dans la largeur de chaque alphabet, ce qui n'est pas génial pour le codage en programmation, en Anglais, en Français par exemple. Mais pour un premier pas, elle suffira.

  1. Configurer la Traduction de PuTTY sous Windows

    • Lancer putty.exe sous Windows. Cliquez sur Category/Windows/Translation, dans la liste déroulante Remote character set sélectionnez UTF-8.
  2. Sélectionner une police de Caractère UTF-8 pour PuTTY sous Windows

    • Ensuite Sélectionnez Category/Windows/Appearence, cochez tout d'abord le choix [x] Allow selection of variable-pitch fonts, et cliquez sur le bouton [Change...].
    • Sur la fenêtre popup de Police, sélectionnez une police UTF-8. Le TrueType SimSun (SimSun.ttf) sera la bienvenue, mais si vous ne l'avez pas, utilisez Arial comme montre la capture d'éran. Cliquez sur [OK].
  3. Définir la Session SSH PuTTY pour la connexion sous Windows

    • Ensuite Sélectionnez Category/Session, Entrez votre Nom de domaine ou IP pour Host Name (or IP Address). Donnez un nom pour Saved Sessions), ici Session Linux, cliquez sur le bouton [Save...].
  4. Vous êtes fin prèt pour une connexion SSH en cliquant sur le bouton [Open].

Tests sur Linux Debian

Maintenant vous êtes connecté sur votre machine à distance Linux.

  1. Tester sur Shell Bourne Again Shell (bash)

    • Ici nous testons tout d'abord si notre session SSH PuTTY est en Unicode, en exécutant la commande Shell par un caractère Unicode:
      # printf "\xc3\xa9\n"
      Il affiche é dans sur le terminal Unocode. Sous un terminal Latin-1, il donnerait é.
    • Voici le changement après l'opération. La locale par défaut C est devenu locale POSIX qui prend en charge UTF-8, en tapant la commande:
      # locale
      La LANG n'est pas prédéfinie, donc par défaut.
  2. Tester l'affichage chinois sur l'écran sur Shell Linux

    • Le fichier de test joint utf8sample.txt est en UTF-8 sans BOM. Quand on tape la commande unix
      # cat utf8sample.txt
      voici le texte chinois si désiré: Un autre fichier de test utf8bomsample.txt en UTF-8 avec BOM (Byte Order Mark) donnera le même résultat d'affichage. Ne vous inquiétez pas sur l'indication du format de fichier dos, car le texte chinois a été saisi en Windows par NJStar et sauvé dans le PC local.
  3. Tester la commande shell mysql en Linux

    Cette démarche est valable pour le client natif de MySQL /usr/bin/mysql. Pour afficher le contenu stocké en Chinois Simplifié dans une table, vous invoquez mysql par

    # mysql --default-character-set=utf8 -u<unsername> -p<password> <your_dbname>
    Ou bien vous invoquez mysql sans l'option --default-character-set, puis sous la console MySQL, faire une requête spéciale de définition
    mysql> SET NAMES 'utf8' COLLATE utf8_general_ci;
    . Et puis sous la console MySQL, faire une requête comme
    mysql> SELECT NameCn FROM tblproducts WHERE (ID IN (358,20506));
    . Les caractères chinois s'afficherons dans le résultat.

    .

Plus de Chinois sur MySQL

L'ordre des travaux n'a pas d'importance. Vous pouvez débuter soit par le côté Linux, soit par le Côté Windows 7.

Client Natif MySQL et Chinois en Windows - MsDos

Il n'est pas possible d'afficher le Chinois en UTF-8 dans le client natif de MySQL mysql.exe, car il est lancé que par le Shell, ici cmd32.exe ou MS-DOS. MS-DOS n'accepte pas les polices UTF-8 asiatiques pour son terminal, que ce soit FangSong, SimSun... MySQL est donc limité par les polices de Ms-DOS approuvées par Microsoft: Raster Terminal, TrueType Lucida Console, Consolas qui ne comportent aucun idéogramme chinois. Même si l'on modifie dans le registre Windows, aucun effet positif ne se produit pour les fontes chinoises. Et en changeant de Code Page en Unicode: Après tout cet acharnement, dans la console MySQL, les idéogrammes s'affichent tout de même en Carré Creux. Cela veut dire que la police de caractères est bien en Unicode, qui prend en charge les codages des caractères chinois, mais dans laquelle les glyphes, ici les idéogrammes ne sont pas dessinés par le créateur de la police chargée. Voici le test et échec:
Lancer une console Ms-Dos par commande Windows cmd.exe:
.
Cliquez sur la boîte système, on change de police de caractère en police console Unicode: Lucida Console,
.
On tape la commande: Et une requête sous la console MySQL pour changer en UTF-8:
. Et puis sous la console MySQL, faire une requête comme. Le résultat que voici:

Les caractères chinois sont affichés en carré creux: démentez-moi SVP, il n'existe pas à ce jour une police de caractère Console Unicode reconnue par MsDos qui contient des idéogrammes chinois. Sinon il existe une méthode de triche, vous modifiez le nom de police via un éditeur de police de caractère, le nommant en "Lucida Console".

Pour afficher le contenu stocké en Chinois Simplifié dans une table, vous deveriez utiliser Outils Graphique d'Aministration de MySQL qui est FreeWare MySQL GUI Administrator Tools. Ou par PHPMyAdmin dans votre Navigateur.

Références

  1. FAQ de Markus Kuhn sur UTF-8 et Unicode pour Unix/Linux
    informations compréhensibles sur comment utiliser Unicode/UTF-8 en systèmes POSIX (Linux, Unix).

Envoyez vos commentaires (0)

Ajouter URL |
Pas encore de commentaires.
Votre commentaire :
Email
Web

Ou connexion :
Qui ?

Veuillez recopier la chaîne :
Chaîne de caractère à recopier dans la case à droite, sensible au MAJUSCULE et minuscule. Cette douleur est nécessaire après avoir reçu des milliers de messages quotidiens générés automatiquement.

Asia Home™ > Outils > MySQL en UTF-8 et Affichage Idéogrammes Chinois | Conditions générales de vente | Retours et remboursements | Clauses de Confidentialité | FAQ | Google+
  

Envie de venir ? | Appelez-nous 7/704 67 79 04 87 (non surtaxé)

Fenêtre contextuelle    Fermer
Veuillez patienter...