MySQLでlatin1_swedish_ciの文字化けを解消する方法
本日、Movable Typeのサーバー移行をする必要があったのですが、
DBの文字コードがlatin1_swedish_ciで登録されており
エクスポートした際に文字化けが発生してしまいまいた。
解消する方法を教えてもらったでのブログでもシェアします。
状況
phpMyAdminでデータを見ると、こんな風に文字化けしてしまっています。
これを何も考えずにサーバー移行をしてしまい、画面が文字化けしてしまいました。
これを解消する方法として、既存のデータを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;
以下のサイトを参考にさせていただきました。感謝
最新情報をお届けします