Ich habe eine MySQL-Datenbank (myDB
; ~ 2GB Größe) mit 4 Tabellen (tab1
, tab2
, tab3
, tab4
). Derzeit wurden die Daten, die in den Tabellen gespeichert sind, unter Verwendung des Zeichensatzes ISO-8859-1
(d. H. Latin-1
) hinzugefügt.Wie migge MySQL-Datenbank von Latin-1 zu UTF-8?
Ich möchte die Daten in allen Tabellen konvertieren UTF-8
und UTF-8
als Standard-Zeichensatz der Tabellen/database/Spalten verwenden.
Auf https://blogs.harvard.edu/djcp/2010/01/convert-mysql-database-from-latin1-to-utf8-the-right-way/ fand ich einen interessanten Ansatz:
mysqldump myDB | sed -i 's/CHARSET=latin1/CHARSET=utf8/g' | iconv -f latin1 -t utf8 | mysql myDB2
Ich habe es noch nicht ausprobiert, aber gibt es irgendwelche Einschränkungen?
Gibt es eine Möglichkeit, es direkt in der MySQL-Shell zu tun?
[EDIT:]
Ergebnis SHOW CREATE TABLE messages;
nach ALTER TABLE messages CONVERT TO CHARACTER SET utf8mb4;
CREATE TABLE `messages` (
`number` int(11) NOT NULL AUTO_INCREMENT,
`status` enum('0','1','2') NOT NULL DEFAULT '1',
`user` varchar(30) NOT NULL DEFAULT '',
`comment` varchar(250) NOT NULL DEFAULT '',
`text` mediumtext NOT NULL,
`date` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`number`),
KEY `index_user_status_date` (`user`,`status`,`date`)
) ENGINE=InnoDB AUTO_INCREMENT=3285217 DEFAULT CHARSET=utf8mb4
Ich lief 'ALTER TABLE tab1 KONVERT AUF CHARAKTER SET utf8mb4;' Sie sagten, dass 'Konvertieren Sie die Codierung der Daten in allen Spalten VARCHAR und TEXT .' findet während dieses Schrittes statt. Das habe ich auch auf https://dev.mysql.com/doc/refman/5.7/en/alter-table.html#alter-table-character-set gefunden. Aber tatsächlich ** die Daten in meiner Tabelle gespeichert wurden nicht konvertiert ** - es ist immer noch in "Latin-1" - nur die Standardeinstellungen und der Datentyp einiger Spalten wurde geändert (ich habe 'diff dump_before_convert.sql dump_after_cobert.sql' auf ausgeführt die Müllkippen). Wie kann ich die aktuell in 'latin-1' gespeicherten Daten in' utf-8mb4' umwandeln? –
Bitte zeigen Sie die aktuelle 'SHOW CREATE TABLE' (zumindest für diese Spalte) und' SELECT HEX (col) ... 'an. Ohne beides ist es schwer zu sagen, was tatsächlich in der Spalte steht und ob das in Ordnung ist oder nicht. –