Comment configurer le jeu de caractères global sur MySQL

12

J'ai essayé de changer le jeu de caractères pour notre MySQL via my.cnf et cela a échoué. J'ai ajouté les paramètres du jeu de caractères répertoriés ci-dessous:

# The MySQL server
[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

# ------------- MYSQL CHARSETS --------------
character_set_system = utf8
character_set_server = utf8
character_set_results = utf8
character_set_database = utf8
character_set_connection = utf8
character_set_client = utf8

collation_connection = utf8_general_ci
collation_database = utf8_general_ci
collation_server = utf8_general_ci

Quand je les ai activés, MySQL n'a pas pu démarrer. Comment puis-je m'assurer que tout est par défaut utf8 - toujours?

Mise à jour

Il y a encore quelques endroits qui ont des problèmes pour être UTF8

character_set_client    utf8
character_set_connection    utf8
character_set_database  latin1
character_set_filesystem    binary
character_set_results   utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir  /usr/share/mysql/charsets/
collation_connection    utf8_general_ci
collation_database  latin1_swedish_ci
collation_server    latin1_swedish_ci

Malheureusement, je n'ai toujours pas trouvé de solution ... des idées?

Actuellement, j'utilise cette configuration avec succès:

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


[mysql]
default-character-set = utf8

Mais PHPMyAdmin montre encore du latin1

character_set_client    utf8
character_set_connection    utf8
character_set_database  latin1
character_set_filesystem    binary
character_set_results   utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir  /usr/share/mysql/charsets/
collation_connection    utf8_general_ci
collation_database  latin1_swedish_ci
collation_server    latin1_swedish_ci
Webnet
la source

Réponses:

23

Vous devez incorporer les éléments suivants dans votre fichier my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


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

Vous pouvez trouver plus d'informations sur les pages de manuel suivantes

En réponse à la réponse de Mark, si vous devez convertir des tables / bases de données existantes dans le jeu de caractères correct, vous aurez besoin d'une ALTERrequête appropriée . Quelque chose de semblable à ce qui suit:

ALTER TABLE `table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Alternativement, il y a un excellent script PHP ici qui le fait pour vous.

Ben Swinburne
la source
J'ai suivi vos instructions et vérifié les liens de documentation ... ayant toujours quelques problèmes (voir ^)
Chaque fois que j'ajoute collation-server = utf8_general_cià la mysqldsection mysql ne redémarre pas
Pouvez-vous regarder le contenu du fichier journal? Il devrait vous donner un message d'erreur expliquant pourquoi il a échoué. Je suppose que votre mysqld a été compilé avec le jeu de caractères général utf8 inclus?
Oui, je pense que c'était ... quel fichier journal?
1
Fonctionne pour moi (Debian 8, MySQL 5.5), sauf pour la default-character-set = utf8ligne sous la [mysqld]section. L'ajout de cette même ligne entraîne le redémarrage de mysqld. Le support Unicode, cependant, fonctionne très bien même sans cette ligne.
Bass
2

La réponse de Ben est correcte, mais la modification des paramètres ne modifiera ABSOLUMENT PAS les jeux de caractères ou les classements des tables existantes. Faites-le avec une instruction ALTER TABLE appropriée.

Notez que si vous ne le spécifiez pas, les tables sont créées dans le jeu de caractères par défaut de la base de données. Il s'agit d'un paramètre par base de données qui peut être ajusté avec ALTER DATABASE. Ce n'est pas non plus défini dans my.cnf.


la source
1
Les nouvelles bases de données hériteront cependant des paramètres mysql par défaut, non?