MySQLでlatin1_swedish_ciの文字化けを解消する方法


本日、Movable Typeのサーバー移行をする必要があったのですが、
DBの文字コードがlatin1_swedish_ciで登録されており
エクスポートした際に文字化けが発生してしまいまいた。

解消する方法を教えてもらったでのブログでもシェアします。

IT/WEB業界への転職なら求人サイトGreen

状況

phpMyAdminでデータを見ると、こんな風に文字化けしてしまっています。

20140922 01

これを何も考えずにサーバー移行をしてしまい、画面が文字化けしてしまいました。

20140922 02

これを解消する方法として、既存のデータをUTF-8に変換してからデータ移行をします。

対応方法

1、文字化けしているデータをバイナリに変換し
2、バイナリからUTF8に再変換する

と言う流れで解消されるようになります。

実行するSQLは以下の2つになります。

ALTER TABLE [テーブル名] MODIFY [フィールド名] BINARY(255);
ALTER TABLE [テーブル名] MODIFY [フィールド名] VARCHAR(255) CHARACTER SET utf8;

テンプレートデータなどのmediumtext型はBLOG型に変更してからutf8に変換します。

ALTER TABLE [テーブル名] MODIFY [フィールド名] BLOB;
ALTER TABLE [テーブル名] MODIFY [フィールド名] mediumtext CHARACTER SET utf8;

これで変更完了です。

MTの文字コードを全てutf8に変換するSQL

実際に実行したSQLも載せておきますので参考にしてみてください。

ALTER TABLE `mt_asset` MODIFY `asset_file_name` BINARY(255);
ALTER TABLE `mt_asset` MODIFY `asset_file_name` VARCHAR(255) CHARACTER SET utf8;
ALTER TABLE `mt_asset` MODIFY `asset_label` BINARY(255);
ALTER TABLE `mt_asset` MODIFY `asset_label` VARCHAR(255) CHARACTER SET utf8;
ALTER TABLE `mt_blog` MODIFY `blog_name` BINARY(255);
ALTER TABLE `mt_blog` MODIFY `blog_name` VARCHAR(255) CHARACTER SET utf8;
ALTER TABLE `mt_category` MODIFY `category_description` BLOB;
ALTER TABLE `mt_category` MODIFY `category_description` mediumtext CHARACTER SET utf8;
ALTER TABLE `mt_category` MODIFY `category_label` BINARY(255);
ALTER TABLE `mt_category` MODIFY `category_label` VARCHAR(255) CHARACTER SET utf8;
ALTER TABLE `mt_entry` MODIFY `entry_text` BLOB;
ALTER TABLE `mt_entry` MODIFY `entry_text` mediumtext CHARACTER SET utf8;
ALTER TABLE `mt_entry` MODIFY `entry_title` BINARY(255);
ALTER TABLE `mt_entry` MODIFY `entry_title` VARCHAR(255) CHARACTER SET utf8;
ALTER TABLE `mt_entry_meta` MODIFY `entry_meta_vclob` BLOB;
ALTER TABLE `mt_entry_meta` MODIFY `entry_meta_vclob` mediumtext CHARACTER SET utf8;
ALTER TABLE `mt_entry_meta` MODIFY `entry_meta_vchar_idx` BINARY(255);
ALTER TABLE `mt_entry_meta` MODIFY `entry_meta_vchar_idx` VARCHAR(255) CHARACTER SET utf8;
ALTER TABLE `mt_field` MODIFY `field_description` BLOB;
ALTER TABLE `mt_field` MODIFY `field_description` mediumtext CHARACTER SET utf8;
ALTER TABLE `mt_field` MODIFY `field_name` BINARY(255);
ALTER TABLE `mt_field` MODIFY `field_name` VARCHAR(255) CHARACTER SET utf8;
ALTER TABLE `mt_log` MODIFY `log_message` BLOB;
ALTER TABLE `mt_log` MODIFY `log_message` mediumtext CHARACTER SET utf8;
ALTER TABLE `mt_log` MODIFY `log_metadata` BINARY(255);
ALTER TABLE `mt_log` MODIFY `log_metadata` VARCHAR(255) CHARACTER SET utf8;
ALTER TABLE `mt_role` MODIFY `role_description` BLOB;
ALTER TABLE `mt_role` MODIFY `role_description` mediumtext CHARACTER SET utf8;
ALTER TABLE `mt_role` MODIFY `role_name` BINARY(255);
ALTER TABLE `mt_role` MODIFY `role_name` VARCHAR(255) CHARACTER SET utf8;
ALTER TABLE `mt_tag` MODIFY `tag_name` BINARY(255);
ALTER TABLE `mt_tag` MODIFY `tag_name` VARCHAR(255) CHARACTER SET utf8;
ALTER TABLE `mt_tbping` MODIFY `tbping_junk_log` BLOB;
ALTER TABLE `mt_tbping` MODIFY `tbping_junk_log` mediumtext CHARACTER SET utf8;
ALTER TABLE `mt_tbping` MODIFY `tbping_excerpt` BLOB;
ALTER TABLE `mt_tbping` MODIFY `tbping_excerpt` mediumtext CHARACTER SET utf8;
ALTER TABLE `mt_tbping` MODIFY `tbping_blog_name` BINARY(255);
ALTER TABLE `mt_tbping` MODIFY `tbping_blog_name` VARCHAR(255) CHARACTER SET utf8;
ALTER TABLE `mt_template` MODIFY `template_name` BINARY(255);
ALTER TABLE `mt_template` MODIFY `template_name` VARCHAR(255) CHARACTER SET utf8;
ALTER TABLE `mt_template` MODIFY `template_text` BLOB;
ALTER TABLE `mt_template` MODIFY `template_text` mediumtext CHARACTER SET utf8;
ALTER TABLE `mt_trackback` MODIFY `trackback_description` BLOB;
ALTER TABLE `mt_trackback` MODIFY `trackback_description` mediumtext CHARACTER SET utf8;
ALTER TABLE `mt_trackback` MODIFY `trackback_title` BINARY(255);
ALTER TABLE `mt_trackback` MODIFY `trackback_title` VARCHAR(255) CHARACTER SET utf8;

以下のサイトを参考にさせていただきました。感謝

MySQLで、latin1_swedish_ciなどの文字化けを解消

 

この記事が気に入ったら
いいね!しよう

最新情報をお届けします

follow us in feedly