web-dev-qa-db-fra.com

Formatage de la ligne de commande MySQL avec UTF8

J'ai une table de base de données qui contient des chaînes suédoises/norvégiennes.

Lorsque je recherche des données, j'obtiens une sortie comme celle-ci:

Sortie avec set names latin1;

+-----------------------------------+
| name                              |
+-----------------------------------+
| Kid Interi#####                   | 
| Bwg Homes                         | 
| If Skadef####kring                | 
| Jangaard Export                   | 
| Nordisk Film                      | 
+-----------------------------------+

Pas de wifi set names utf8; afin de voir les caractères avec leur bon encodage, puis le formatage de la sortie tabulaire de la ligne de commande MySQL se casse.

Sortie avec set names utf8;

+-----------------------------------+
| name                              |
+-----------------------------------+
| Kid Interiør                     | 
| Bwg Homes                         | 
| If Skadeförsäkring              | 
| Jangaard Export                   | 
| Nordisk Film                      | 
+-----------------------------------+

Question:

Ce n'est pas un gros problème mais cela rend la sortie un peu plus difficile à lire. Quelqu'un sait-il comment conserver la mise en forme tabulaire intacte?

60
spier

Réponse courte

Démarrez le client avec l'option --default-character-set=utf8:

mysql --default-character-set=utf8

Vous pouvez définir cela par défaut dans le /etc/mysql/my.cnf fichier.

[mysql]
default-character-set=utf8

La réponse courte n'a pas fonctionné, lire ci-dessous

La commande ci-dessus force le character_set_client, character_set_connection et character_set_results les variables de configuration doivent être utf8.

Afin de vérifier les valeurs de toutes les variables de configuration liées au jeu de caractères, vous pouvez exécuter:

show variables like '%char%';

Le character_set_database vous donne le jeu de caractères de la base de données (schéma) dans laquelle vous vous trouvez. Le schéma et les tables sont créés par défaut avec le jeu de caractères spécifié dans character_set_server, sauf si cela est spécifié explicitement dans l'instruction CREATE.

Le character_set_server peut être modifié dans le my.cnf fichier:

[mysqld]
character-set-server = utf8

De plus, les tables et les colonnes peuvent avoir leur propre jeu de caractères, qui peut être différent de leur table ou schéma parent. Pour vérifier spécifiquement les valeurs de chaque table et colonne d'une base de données, voyez cette réponse: Comment puis-je voir quel jeu de caractères est une base de données/table/colonne MySQL?

Si vous souhaitez modifier le jeu de caractères des tables et colonnes existantes, consultez cette réponse: Comment convertir un jeu de caractères et un classement de base de données MySQL entiers en UTF-8?

Plus d'informations sur les jeux de caractères de connexion dans la documentation mysql .

Tout est réglé sur utf8, mais je vois toujours des personnages étranges

Même si toutes les variables de jeux de caractères, les tables et les colonnes sont définies sur utf8, il peut y avoir des cas où vous voyez des caractères étranges sur votre écran. Par exemple, quelqu'un peut avoir écrit des caractères Unicode dans un utf8 colonne, via un client avec latin1 connexion (par exemple en exécutant mysql --default-character-set=utf8). Dans ce cas, vous devez vous connecter à la base de données avec le même jeu de caractères que les valeurs ont été écrites. Vous pouvez également les récupérer et les réécrire via l'encodage correct.

[~ # ~] note [~ # ~] : Comme le soulignent les commentaires, le myslq utf8 L'encodage n'est pas une implémentation vraie et complète d'UTF-8. Si une implémentation complète de UTF-8 est nécessaire, on peut utiliser le utf8mb4 charset:

mysql --default-character-set=utf8mb4

Plus d'informations ici: Quelle est la différence entre les jeux de caractères utf8mb4 et utf8 dans MySQL?

106
Martin Taleski