<> Ce document présente les configurations à effectuer pour être compatible avec Unicode. /!\ '''Attention''' : passer à Unicode ne se fait pas sur un coup de tête ! Il y a des implications à presque tous les niveaux et une mauvaise mise en place entraînerait au mieux des accents mal affichés et au pire des '''corruptions de données''' (typiquement suite à des mixages d'encodages) ! == Stratégie == ''...([[JeanChristopheAndré/ÀFaire|reste à écrire]])...'' == Configuration == /!\ '''Attention''' : l'ordre est important. En particulier : il faut installer les `locales` avant tout. === Environnement système === * installer le paquet `locales` et choisir une locales `UTF-8` par défaut (typiquement `fr_FR.UTF-8`). <> === MySQL ≥ 5.0 === * [[https://mathiasbynens.be/notes/mysql-utf8mb4|pour pouvoir stocker les émoticônes Unicode]], mais surtout éviter de voir son texte tronqué lors de l'insertion en BDD, il est nécessaire de supporter UTF-8 sur au moins 4 octets ; le jeu de caractères `utf8` de MySQL est sur 3 octets, tandis que `utf8mb4` est sur 4 octets. * Pour utiliser `utf8mb4` avec Python, il faut au minimum la version `1.2.5` de `python-mysqldb` (sous Debian [[Jessie]] on utilisera alors les backports). * créer le fichier `/etc/mysql/conf.d/local.cnf` suivant : {{{ [client] # l'option suivante semble gêner quelques outils, comme mysqlbinlog #default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] # on ne négocie pas : on impose Unicode character-set-client-handshake = FALSE # par défaut du côté serveur character-set-server = utf8mb4 # à exécuter pour tous les clients (indispensable pour PHP 4, au moins) init-connect = 'SET NAMES utf8mb4' # Corrige le tri des textes avec des accents collation-server = utf8mb4_general_ci ##### avant Debian Wheezy : # language = /usr/share/mysql/french ##### depuis Debian Wheezy : lc-messages = fr_FR bind-address = 127.0.0.1 #bind-address = 0.0.0.0 # Les logs # ATTENTION : Be aware that this log type is a performance killer. #general_log_file = /var/log/mysql/mysql.log #general_log = 1 ##### avant Debian Wheezy : # log_slow_queries = /var/log/mysql/mysql-slow.log # log_bin = /var/log/mysql/mysql-bin.log ##### depuis Debian Wheezy : slow-query-log = TRUE slow_query_log_file = /var/log/mysql/mysql-slow.log log_queries_not_using_indexes max_connections = 500 [mysqldump] # est-ce vraiment utile ? *** À TESTER *** default-character-set = utf8 [mysql] # par défaut du côté client (pour root, qui ne subit pas le init-connect) default-character-set = utf8 }}} * relancer ensuite le service MySQL avec : {{{ $ sudo invoke-rc.d mysql restart }}} <> === MariaDB ≥ 10 === * MariaDB arrive dans [[Debian/Stretch|Debian 9]] avec le support Unicode bien configuré par défaut (encodage & tri) * si on devait encore ajuster des choses, cela devrait se faire dans `/etc/mysql/mariadb.conf.d/90-local.cnf`, par exemple : {{{ # Fichier /etc/mysql/mariadb.conf.d/90-local.cnf [mysqld] #bind-address = 0.0.0.0 max_connections = 500 # Enable the slow query log to see queries with especially long duration slow_query_log = 1 slow_query_log_file = /var/log/mysql/mariadb-slow.log long_query_time = 10 log_slow_rate_limit = 1000 log_slow_verbosity = query_plan log-queries-not-using-indexes }}} <> === Apache ≥ 2.0 === * activer le module MIME si ce n'est déjà fait : {{{ sudo a2enmod mime }}} * directive globale à ajouter dans `/etc/apache2/conf.d/charset` : {{{ AddDefaultCharset UTF-8 }}} * vérifier que vous avez cette option (au moins) dans `/etc/apache2/mods-available/autoindex.conf`, sinon l'y ajouter : {{{ IndexOptions Charset=UTF-8 }}} * vérifier la configuration puis relancer le service Apache avec : {{{ $ sudo apache2ctl configtest $ sudo apache2ctl graceful }}} <> === Python === * directive locale à ajouter au début de chaque fichier : {{{#!python #!/usr/bin/env python # -*- coding: utf-8 -*- }}} * [[http://docs.djangoproject.com/en/dev/howto/deployment/modpython/#if-you-get-a-unicodeencodeerror|le support des noms de fichiers avec caractères non-ASCII]] : * avec [[Debian/Lenny]], ajouter la ligne suivante dans `/etc/apache2/envvars` : {{{ export LC_ALL='fr_FR.UTF-8' }}} * avec [[Debian/Squeeze]], dé-commenter la ligne suivante dans `/etc/apache2/envvars` : {{{ . /etc/default/locale }}} <> === PHP === * (PHP4 uniquement) directive globale à ajouter dans `/etc/php4/apache2/php.ini` : {{{ default_charset = "utf-8" }}} * on a parfois besoin de ne l'activer que pour une seule arborescence, par exemple le temps d'une migration, auquel cas on utilisera une configuration Apache de ce genre : {{{ AddDefaultCharset iso-8859-1 php_value default_charset 'iso-8859-1' AddDefaultCharset utf-8 php_value default_charset 'utf-8' }}} * vérifier la configuration puis relancer le service Apache avec : {{{ $ sudo apache2ctl configtest $ sudo apache2ctl graceful }}} <> === SmokePing === * directive globale à ajouter dans la section `*** Presentation ***` : {{{ template = /etc/smokeping/basepage.html charset = utf-8 }}} <> === OCS-Inventory === * convertir le fichier de traduction en français de `ISO-8859-1` vers `UTF-8` : {{{ mv languages/french.txt languages/french.txt.orig iconv --from=ISO-8859-1 --to=UTF-8 languages/french.txt.orig > languages/french.txt sed -i '/^0 /s/iso-8859-1/utf-8/' languages/french.txt }}}