[MySQL] latin1 を utf8 へ

MySQL をインストールすると、デフォルトの文字コードは latin1 に設定されています。
この状態でも ( PHP など ) プログラム側で対応してれば、日本語マルチバイト文字も ( 見た目上 ) 問題なく使えるわけですが・・・

  • バックアップ ( mysqldump ) で化ける
  • phpMyAdmin で化ける
  • etc 

百害あって一利なし な訳です。

というわけで、latin1 で作ってしまったデータベースを utf8 に移行する方法を説明します。

※この方法だけではないと思いますし、最適かもわかりませんが、とりあえずできたので良しとします。

 

1) 文字コードを指定して、データベースのバックアップを取る

mysqldump を単純に実行すると日本語など 2 バイト文字が化けてしまうので、データベースが latin1 で作成されている ということを明示的に指定してバックアップを取る。

>mysqldump -u USER -pPWD --default-character-set=latin1 DB > backup.sql

2) 作成したファイルを UTF-8 に変更する

バックアップファイルの形式が UTF-8 以外の形式になっているとリストア時に文字化けが発生するので、TeraPad や サクラエディタ など、UTF-8 に対応しているエディタでファイル形式を明示的に UTF-8 に変換します。

3) リストア時に使用する文字コードを作成したファイルに記述する

バックアップファイルの先頭に、リストア時に使用する文字コードを指定する 1 文を追記します。

-- MySQL dump 10.11
--
-- Host: localhost    Database: XXXXX
-- ------------------------------------------------------
-- Server version    5.0.45-community-nt

~~途中省略~~

SET NAMES utf8;

--
-- Table structure for table `modx_active_users`
--

DROP TABLE IF EXISTS `modx_active_users`;
CREATE TABLE `modx_active_users` (

~~途中省略~~

4) テーブルの文字コードを修正する

バックアップファイルを確認して、CREATE TABLE ~ と書かれた行の数行下に CHARSET=latin1 という記述があれば、 CHARSET=utf8 に修正する。

5) リストアする

UTF-8 ( 紹介順序:utf-general-ci ) で作成しておいたデータベースに、通常の手順でリストアします。

>mysql -u USER -pPWD DB < modx.sql


自宅サーバーWebRing << 前 |ID=231 |次 >> 乱移動前後5表示サイト一覧