web-dev-qa-db-de.com

utf8 verstummte beim Import in MySQL

Das Importieren von UTF8-codierten Daten in mysql funktioniert für mich nicht. UTF8-Zeichen sind beschädigt. Zum Beispiel Nöthnagel wird angezeigt als Nöthnagel

Ich habe eine SQL-Dump-Datei zum Importieren erstellt, die UTF-8-kodierte Daten enthält. Zum Beispiel:

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

Die Folge von Bytes, die ö in der Datei darstellt, ist c3 b6, was meiner Meinung nach korrekt ist, da sie in vim und in meiner bash-Shell, in der diese Umgebungsvariablen gesetzt sind, korrekt angezeigt wird:

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

Die MySQL-Datenbank wurde wie folgt erstellt:

mysql> CREATE DATABASE mydb CHARACTER SET utf8;

Die MySQL-Tabelle wurde so erstellt:

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;  

Ich importiere die Dump-Datei wie folgt:

 mysql -u root -psecret mydb < mydump.sql

Bitte sag mir, was oben fehlt.

22
handros

Ich denke, es hat auch etwas mit der Sortierung zu tun, aber ich bin mir nicht sicher. In meinem Fall war es sicherlich der Fall, da ich kyrillisch unterstützen musste.
Versuchen Sie dies, arbeitete für mich:

  1. Legen Sie die anfängliche Sortierung beim Erstellen der Zieldatenbank auf utf8_general_ci fest. 

  2. Fügen Sie SET NAMES 'utf8' COLLATE 'utf8_general_ci'; am Anfang Ihrer SQL-Datei hinzu

  3. mysql -u root -p --default-character-set=utf8 yourDB < yourSQLfile.sql ausführen

Eine weitere Sache: Um die UTF-8-Daten ordnungsgemäß aus Ihrer Datenbank abzurufen, müssen Sie auch die Verbindungszeichenfolge ändern. Zum Beispiel: 

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

Schauen Sie sich zusätzlich an, was mein Problem war.

49
Less

Das Problem wurde gelöst, indem Sie dies oben in der SQL-Datei hinzufügten:

SET NAMES utf8;
10
handros

Verwenden Sie diesen Befehl, um die utf8-Tabelle in die Datenbank zu importieren:

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

Ich hatte ein ähnliches Problem. Es gibt eine Reihe von Variablen, die UTF8 sein sollten, nicht nur die Datenbank, sondern auch der Client, die Verbindung, der Server usw. 

Die Lösung Ihres Problems ist in diesem Artikel beschrieben. Die beschriebene Lösung ist portabel und funktioniert daher nicht nur für utf8, sondern für alle anderen Zeichensätze. Möglicherweise müssen Sie es an Ihre Bedürfnisse anpassen.

0
Greeso