web-dev-qa-db-fra.com

utf8 tronqué lors de l'importation dans mysql

L'importation de données encodées en UTF8 dans mysql ne fonctionne pas pour moi. Les caractères UTF8 sont corrompus. Par exemple Nöthnagel est affiché comme Nöthnagel

J'ai créé un fichier de vidage SQL pour effectuer l'importation, qui contient des données codées UTF-8. Par exemple:

INSERT INTO `users` VALUES(1, 'Fred','Nöthnagel');

La séquence d'octets représentant ö dans le fichier est c3 b6, ce qui est correct, car elle s'affiche correctement dans vim et dans mon shell bash, dans lequel ces variables d'environnement sont définies:

$ env | grep -i utf
LANG=en_US.UTF-8
XTERM_LOCALE=en_US.UTF-8

La base de données mysql a été créée comme suit:

mysql> CREATE DATABASE mydb CHARACTER SET utf8;

La table mysql a été créée pour:

CREATE TABLE `users` (  
    `id` int(11) NOT NULL AUTO_INCREMENT,  
    `first_name` varchar(30) NOT NULL,  
    `last_name` varchar(30) NOT NULL,
    PRIMARY KEY (`id`),  
    UNIQUE KEY `last_name` (`last_name`)  
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;  

J'importe le fichier de vidage comme ceci:

 mysql -u root -psecret mydb < mydump.sql

S'il vous plaît dites-moi ce qui manque à ce qui précède.

22
handros

Je pense que cela pourrait aussi avoir quelque chose à voir avec la collation, mais je ne suis pas sûr. Dans mon cas, cela a certainement été le cas, car je devais soutenir cyrillic.
Essayez ceci, a travaillé pour moi:

  1. Définissez le classement initial lors de la création de la base de données cible sur utf8_general_ci 

  2. Ajoutez SET NAMES 'utf8' COLLATE 'utf8_general_ci'; en haut de votre fichier SQL

  3. Exécuter mysql -u root -p --default-character-set=utf8 yourDB < yourSQLfile.sql

Une dernière chose, pour obtenir correctement les données UTF-8 de votre base de données, vous devrez également modifier votre chaîne de connexion. Par exemple: 

mysql.url=jdbc:mysql://localhost:3306/nbs?useJvmCharsetConverters=false&useDynamicCharsetInfo=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&useEncoding=true

En outre, jetez un oeil à ce que mon problème était.

49
Less

Le problème a été résolu en ajoutant ceci en haut du fichier SQL:

SET NAMES utf8;
10
handros

Utilisez cette commande pour importer la table utf8 dans la base de données:

mysql -u USERNAME  -pPASSWORD --default_character_set utf8  DATABASE < file.sql
8
AliSh

J'avais un problème similaire. Il y a un certain nombre de variables qui devraient être UTF8, pas seulement la base de données, elles incluent le client, la connexion, le serveur, etc. 

La solution à votre problème est décrite dans cet article . La solution décrite est portable et ne fonctionne donc pas uniquement pour utf8, mais pour tous les autres jeux de caractères. Vous devrez peut-être le modifier pour l'adapter à vos besoins.

0
Greeso