私は4つのテーブル(tab1
、tab2
、tab3
、tab4
)でMySQLデータベース(myDB
;〜2GBのサイズ)を持っています。現在、テーブルに格納されているデータは、文字セット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シェルで直接行う方法はありますか?
[EDIT:] 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'をonダンプ)。 'latin-1'に現在格納されているデータを' utf-8mb4'に変換するにはどうしたらいいですか? –
現在の 'SHOW CREATE TABLE'(少なくともその列について)と' SELECT HEX(col)... 'を表示してください。これらの両方がなければ、実際に何が列にあるのか、それがOKであるかどうかを言うのは難しいです。 –