MySQL en ligne de commande mise en forme avec l'UTF8
J'ai une table de base de données qui contient des suédois/norvégien chaînes.
Quand j'ai une requête certaines données, j'obtiens en sortie comme ceci:
Sortie avec set names latin1;
+-----------------------------------+
| name |
+-----------------------------------+
| Kid Interi##### |
| Bwg Homes |
| If Skadef####kring |
| Jangaard Export |
| Nordisk Film |
+-----------------------------------+
Maintenant, si je set names utf8;
afin de voir les personnages avec leur codage approprié, puis la mise en forme des tableaux de sortie de la ligne de commande de MySQL pauses.
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 grand problème, mais il rend la sortie un peu plus difficile à lire. Quelqu'un sait comment faire pour garder la mise en forme de tableaux intacte?
Vous devez vous connecter pour publier un commentaire.
Réponse courte
De lancer le client avec l'option
--default-character-set=utf8
:Vous pouvez définir cela comme un défaut dans la
/etc/mysql/my.cnf
fichier.La réponse n'a pas de travail, lire soufflet
La commande ci-dessus des forces de la
character_set_client
,character_set_connection
etcharacter_set_results
variables de configuration pour êtreutf8
.Afin de vérifier les valeurs pour tous le jeu de caractères liés variables de configuration, vous pouvez exécuter:
La
character_set_database
vous donne le jeu de caractères de la base de données actuelle (schéma) que vous êtes en. Le schéma et les tableaux sont créés par défaut avec le jeu de caractères spécifié dans lecharacter_set_server
, sauf s'il est explicitement spécifié dans leCREATE
déclaration.La
character_set_server
peut être modifié dans lemy.cnf
fichier:En outre les tables et les colonnes peuvent avoir leur propre jeu de caractères qui peut être différent de leur parent de tableau ou de schéma. Pour contrôler spécifiquement les valeurs de chaque colonne et de table dans une base de données voir cette réponse:
Comment faire pour voir quel jeu de caractères une base de données MySQL /table /colonne est?
Si vous souhaitez modifier le jeu de caractères de l'existant, des tables et des colonnes, voir cette réponse: Comment faire pour convertir un ensemble de base de données MySQL characterset et de classement de l'UTF-8?
Plus d'informations sur la connexion de jeux de caractères dans le mysql docsumentation.
Tout est mis en utf8, mais je vois encore des caractères bizarres
Même si tous les jeux de caractères variables, les tables et les colonnes sont définies à
utf8
, il pourrait y avoir des cas où vous voyez des caractères bizarres sur votre écran. Par exemple, quelqu'un pourrait ont écrit des caractères Unicode dans unutf8
colonne, par le biais d'un client aveclatin1
de connexion (par exemple en exécutantmysql --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 aussi les extraire et de les réécrire à travers le codage correct.NOTE: Comme les commentaires le soulignent, la myslq
utf8
l'encodage n'est pas une vraie et entière mise en œuvre de l'UTF-8. Si une mise en œuvre complète de l'UTF-8 est nécessaire, on peut utiliser lautf8mb4
charset:Plus d'infos ici: Quelle est la différence entre utf8mb4 et les jeux de caractères utf8 dans MySQL?
mysql --default-character-set=utf8
mysql --default-character-set=utf8mb4
Ces mots "ø ö ä" avec l'utf8 prend 2 octets, de sorte que vous avez oublié d'utiliser wchar ou utf chaîne?
Voici mon code de test en python:
le résultat est le même que celui de votre programme imprimer.
tout ce que je dois faire est de changer l'encodage d'une chaîne de
s
:le résultat est
Je n'ai pas fait de test en c++, mais je suggère que vous pouvez utiliser wchar, std::wcout.
mysql-client
.