MySQL Konvertieren latin1-Daten auf UTF8
Ich importiert einige Daten mit LOAD DATA INFILE in die MySQL-Datenbank. Die Tabelle selbst und die Spalten sind mit dem UTF8-Zeichensatz, aber der Standard-Zeichensatz der Datenbank latin-1. Da die default-character-Typ der Datenbank ist latin1, und ich verwendet LOAD DATA INFILE ohne Angabe eines Zeichensatzes, es interpretiert die Datei als latin1, obwohl die Daten in der Datei UTF8. Jetzt habe ich einen Haufen von schlecht kodierten Daten in meiner UTF8 colum. Ich fand dieser Artikel, die scheint, um ein ähnliches problem, die ist "UTF8 eingefügt in cp1251", aber mein problem ist "Latin1 eingefügt in UTF8". Ich habe versucht, die Bearbeitung der Abfragen, es zu konvertieren, die latin1-Daten auf UTF8, aber kann nicht ankommen es zu wirken. Entweder die Daten kommen aus der gleichen, oder sogar noch mehr entstellt als vorher. Nur als Beispiel, das Wort Québec, die zeigen, wie Québec.
[WEITERE INFOS]
Wenn die Auswahl der Daten, eingewickelt in HEX(), Québec hat den Wert 5175C383C2A9626563.
Erstellen Tabelle (gekürzt) dieser Tabelle ist.
CREATE TABLE MyDBName.`MyTableName`
(
`ID` INT NOT NULL AUTO_INCREMENT,
.......
`City` CHAR(32) NULL,
.......
`)) ENGINE InnoDB CHARACTER SET utf8;
- bitte posten Sie die CREATE TABLE-Anweisung für die Tabelle in Frage, zusammen mit ein paar gebrochenen Zeilen, aber wickeln der Defekten Spalte in hex(), etwa so:
SELECT HEX(name) FROM cities LIMIT 5
. mit diesen Informationen kann ich Ihnen helfen herauszufinden, die richtige Art und Weise zu beheben, die es nach diesem Artikel. (BTW: ich Liebe diesen Artikel! es ' s rettete mein Hintern schon ein paar mal.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich schon Fälle gehabt, wie dies in alten wordpress-Installationen mit dem problem, dass die Daten selbst wurde bereits in UTF-8 in eine Latin1 Datenbank (durch WP-default-charset). Dies bedeutet, dass es keine echte Notwendigkeit für die Konvertierung der Daten, sondern der ddbb-und Tabellenformate.
In meiner Erfahrung, die Dinge Durcheinander geraten, wenn dabei die Müllkippe, wie ich Sie verstehe MySQL verwenden Sie die client-Zeichensatz, was in vielen Fällen ist nun UTF-8.
Daher sicherstellen, dass ein Export mit der gleichen Kodierung der Daten ist sehr wichtig. Bei Latin1-DDBB mit UTF-8 Codierung:
Dann ersetzen Sie die Latin1-Referenzen in der exportierten dump vor reimporting, um eine neue Datenbank in UTF-8. Art:
In meinem Fall dieser link war eine große Hilfe.
Kommentierte hier in der spanischen.
replace "latin1" "utf8mb4" <dump.latin1.sql >dump.utf8.sql
um alles in einer Tabelle für das verwenden der UTF-8. BEACHTEN Sie jedoch, dass "latin1" nicht auftreten, anderswo in der dump (Feld Inhalt) und, nur um sicher zu gehen, überprüfte ich die diff, bevor Sie es importieren.Obwohl es kaum noch tatsächliche für die OP, ich habe zufällig eine Lösung gefunden zu haben in der MySQL-Dokumentation für ALTER TABLE. Ich poste es hier nur für zukünftige Referenz:
LOAD DATA INFILE können Sie eine encoding-Datei werden soll, in:
http://dev.mysql.com/doc/refman/5.1/en/load-data.html
Schrieb ich, dass http://code.google.com/p/mysqlutf8convertor/ für Latein-Datenbank auf UTF-8 Datenbank. Alle Tabellen und Feld zu ändern von UTF-8.
Konvertierung von latin1 zu UTF8 ist nicht, was Sie tun möchten, Sie irgendwie brauchen das Gegenteil.
Wenn das, was wirklich geschah, war dies:
Was Sie nun tun müssen, ist:
Ich vor kurzem ein shell-Skript, das automatisiert die Konvertierung. Es ist auch konfigurierbar, schreiben Sie benutzerdefinierte Filter für jeden text, den Sie möchten, zu ersetzen oder zu entfernen. Zum Beispiel : Strippen von HTML-Zeichen etc. Tabelle whitelists und blacklists sind auch möglich. Sie können es herunterladen unter sourceforge: https://sourceforge.net/projects/mysqltr/
Versuchen Sie dies:
1) - Dump deiner DB
2) Öffnen dump.sql-text-editor und ersetzen Sie alle vorkommen von "SET NAMES latin1" durch "SET NAMES utf8"
3) Erstellen Sie eine neue Datenbank und stellen Sie Ihre dumpfile