367 votes

Changer le jeu de caractères par défaut de MySQL en UTF-8 dans my.cnf ?

Actuellement, nous utilisons les commandes suivantes en PHP pour définir le jeu de caractères à UTF-8 dans notre application.

Comme il s'agit d'un peu de surcharge, nous aimerions définir ce paramètre par défaut dans MySQL. Pouvons-nous le faire dans /etc/my.cnf ou à un autre endroit ?

SET NAMES 'utf8'
SET CHARACTER SET utf8

J'ai cherché un jeu de caractères par défaut dans le fichier /etc/my.cnf, mais il n'y a rien concernant les jeux de caractères.

À ce stade, j'ai fait ce qui suit pour définir les variables MySQL charset et collation sur UTF-8 :

skip-character-set-client-handshake
character_set_client=utf8
character_set_server=utf8

Est-ce une façon correcte de procéder ?

484voto

NinjaCat Points 3809

Pour définir la valeur par défaut UTF-8, vous devez ajouter ce qui suit à my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

Si vous voulez changer le jeu de caractères d'une BD existante, faites-le moi savoir... votre question ne le spécifiait pas directement donc je ne suis pas sûr que ce soit ce que vous voulez faire.

263voto

Mustafah ELBanna Points 2310

Pour la version récente de MySQL,

default-character-set = utf8

cause un problème. C'est déprécié, je crois.

Comme Justin Ball dit dans " Mise à jour vers MySQL 5.5.12 et maintenant MySQL ne démarre pas vous devriez :

  1. Enlevez cette directive et vous devriez être bon.

  2. Ensuite, votre fichier de configuration ('/etc/my.cnf' par exemple) devrait ressembler à cela :

    [mysqld]
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8
  3. Redémarrez MySQL.

  4. Pour s'assurer que votre MySQL est UTF-8, exécutez les requêtes suivantes dans votre invite MySQL :

    • Première requête :

       mysql> show variables like 'char%';

      La sortie devrait ressembler à ça :

       +--------------------------+---------------------------------+
       | Variable_name            | Value                           |
       +--------------------------+---------------------------------+
       | character_set_client     | utf8                            |
       | character_set_connection | utf8                            |
       | character_set_database   | utf8                            |
       | character_set_filesystem | binary                          |
       | character_set_results    | utf8                            |
       | character_set_server     | utf8                            |
       | character_set_system     | utf8                            |
       | character_sets_dir       | /usr/local/mysql/share/charsets/|
       +--------------------------+---------------------------------+
    • Deuxième requête :

       mysql> show variables like 'collation%';

      Et le résultat de la requête est :

       +----------------------+-----------------+
       | Variable_name        | Value           |
       +----------------------+-----------------+
       | collation_connection | utf8_general_ci |
       | collation_database   | utf8_unicode_ci |
       | collation_server     | utf8_unicode_ci |
       +----------------------+-----------------+

55voto

tomazzlender Points 456

Sur MySQL 5.5 j'ai dans my.cnf

[mysqld] 
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

Le résultat est

mysql> show variables like "%character%";show variables like "%collation%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

24voto

Derek Points 315

NijaCat était proche, mais a spécifié une surenchère :

Pour définir la valeur par défaut UTF-8, vous devez ajouter ce qui suit à my.cnf

[client]
default-character-set=utf8

[mysqld]
default-character-set = utf8

Ensuite, pour vérifier :

mysql> show variables like "%character%";show variables like "%collation%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

23voto

amiroff Points 191

J'ai aussi découvert qu'après avoir réglé default-character-set = utf8 sous [mysqld] titre, MySQL 5.5.x ne démarrait pas sous Ubuntu 12.04 (Pangolin précis).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X