我有一個MySQL數據庫(myDB
;大小~2GB),有4個表格(tab1
,tab2
,tab3
,tab4
)。目前,使用字符集ISO-8859-1
(即Latin-1
)添加存儲在表中的數據。如何將MySQL數據庫從Latin-1遷移到UTF-8?
我想轉換所有表中的數據爲UTF-8
並使用UTF-8
作爲表/數據庫/列的默認字符集。
在我發現一個有趣的方法:
mysqldump myDB | sed -i 's/CHARSET=latin1/CHARSET=utf8/g' | iconv -f latin1 -t utf8 | mysql myDB2
我還沒有嘗試過,但是否有什麼注意事項?
有沒有辦法直接在MySQL shell中做到這一點?
[編輯:]
的SHOW CREATE TABLE messages;
結果運行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
我運行了'ALTER TABLE tab1 CONVERT TO CHARACTER SET utf8mb4;'你說'轉換任何VARCHAR和TEXT列中的數據編碼發生在那一步。這也是我在https://dev.mysql.com/doc/refman/5.7/en/alter-table.html#alter-table-character-set中找到的。但實際上**存儲在我的表中的數據沒有被轉換** - 它仍然在'Latin-1' - 只有默認值和某些列的數據類型發生了變化(我運行了'diff dump_before_convert.sql dump_after_cobert.sql'轉儲)。如何將當前存儲在'latin-1'中的數據轉換爲'utf-8mb4'? –
請顯示當前的'SHOW CREATE TABLE'(至少對於該列)和'SELECT HEX(col)...'。如果沒有這兩種情況,很難說列中的實際情況,以及是否可以。 –