9.1 Quels sont les langues supportés par MySQL?

mysqld peut émettre des messages d'erreur dans les langues suivantes : Hollandais, Anglais (par défaut), Estonien, Français, Allemand, Hongrois, Italien, Norvégien, Polonais, Portugais, Espagnol et Suédois.

Pour démarrer mysqld avec une langue donnée, utilisez l'option --language=lang ou -L lang . Par exemple :

shell> mysqld --language=swedish

ou:

shell> mysqld --language=/usr/local/share/swedish

Notez que tous les noms de langues sont spécifiés en minuscules.

Le fichie de langue est situé (par défaut, dans le dossier `mysql_base_dir/share/LANGUAGE/'.

Pour modifier le fichier de message d'erreur, il vous faut éditer le fichier `errmsg.txt' et exécuter la commande suivante pour générer le fichier `errmsg.sys' :

shell> comp_err errmsg.txt errmsg.sys

Si vous mettez à jour MySQL, n'oubliez pas de répeter la même manoeuvre avec le nouveau fichier @new `errmsg.txt'.

9.1.1 Le jeu de caractère utilisé pour le tri des données

Par défaut, MySQL utilise le jeu de caractère ISO-8859-1 (Latin1). C'est le jeu de caractères utilisé aux USA et en Europe Occidentale.

Le jeu de caractères détermine les caractères autorisés dans les noms, et la méthode de tri utilisée dans les clauses ORDER BY et GROUP BY de la commandes SELECT.

Vous pouvez changer le jeu de caractères au moment de la compilation, en utilisant l'option --with-charset=charset de configure. 4.7.1 Introduction à l'installation rapide.

Pour ajouter un nouveau jeu de caractères à MySQL, utilisez la procédure suivante :

9.1.2 Ajouter un nouveau jeu de caractère

  1. Choisir un nom pour le jeu de caractère, dénommé MYSET.
  2. Créer le fichier `strings/ctype-MYSET.c' dans la distribution source de MySQL.
  3. Regarder dans le fichier `ctype-*.c' pour savoir ce qui doit être défini. Notez que les tableaux de votre fichier doivent avoir des noms du type ctype_MYSET, to_lower_MYSET etc... to_lower[] et to_upper[] sont de simples tableaux qui contiennent les caractères minuscules et majuscules du jeu de caractère. Par exemple :
    to_lower['A'] doit contenir 'a'
    to_upper['a'] doit contenir 'A'
    
    sort_order[] est une map qui indique comment les caractères doivent être ordonné lors des comparaisons et des tris. Pour la plus part des jeux de caractères, c'est la même valeur que pour to_upper[] (ce qui signifie que le tri sera insensible à la casse). MySQL effectuera les tris en se basant sur la valeur de sort_order[character]. ctype[] est un tableau de valeurs de bit, avec un élément par caractère. (Notez que to_lower[], to_upper[] et sort_order[] sont indexés par valeur de caractère, mais que ctype[] est indexé par valeur de caractère +1. C'est une vieille technique qui permet de gérer les EOF). Vous pouvez trouver la définitions de ces champs de bit dans `m_ctype.h':
    #define _U      01      /* Majuscule */
    #define _L      02      /* Minuscule */
    #define _N      04      /* Chiffre */
    #define _S      010     /* Espacement*/
    #define _P      020     /* Ponctuation */
    #define _C      040     /* Caractère de contrôle */
    #define _B      0100    /* Blanc */
    #define _X      0200    /* Chiffre hexadécimal */
    
    L'entrée de ctype[] pour chaque caractère doit être l'union des masques de bits qui décrivent le caractère. Par exemple, 'A' est une caractère majuscule, (_U) mais aussi un chiffre hexadécimal. (_X), donc son type devrait contenir ctype['A'+1]
    _U + _X = 01 + 0200 = 0201
    
  4. Ajouter un numéro unique pour votre jeu de caractères dans `include/m_ctype.h.in'.
  5. Ajouter le nom du jeu de caractère dans la liste CHARSETS_AVAILABLE de configure.in.
  6. Reconfigurer, recompiler et tester.

9.1.3 Support des caractères multi-byte

Si vous créez un jeu de caractères multi byte, vous pouvez utiliser la macro _MB. Dans le fichier `include/m_ctype.h.in', ajouter :

#define MY_CHARSET_MYSET  X
#if MY_CHARSET_CURRENT == MY_CHARSET_MYSET
#define USE_MB
#define USE_MB_IDENT
#define ismbchar(p, end)  (...)
#define ismbhead(c)       (...)
#define mbcharlen(c)      (...)
#define MBMAXLEN          N
#endif

où :

MY_CHARSET_MYSET Une valeur de jeu de caractère unique.
USE_MB Ce jeu de caractère a des caractères multi-byte, géré par ismbhead() et mbcharlen()
USE_MB_IDENT (optionnel) Si défini, vous pouvez utiliser des noms de tables et de colonnes avec des caractères multi bytes.
ismbchar(p, e) retourne 0 si p ne contient pas de caractère multi-byte , ou bien la taille des caractères (en octets). p et e pointent au début et à la fin de la chaîne. Vérifier de (char*)p à (char*)e-1.
ismbhead(c) Vrai (Trueà si c est le premier caractère d'une chaîne multi-byte.
mbcharlen(c) Taille d'une chaîne multi-byte si c est le premier caractère d'une chaîne.
MBMAXLEN Taille en byte du plus grand caractère du jeu de caractère.