MySQL 4.0 の SJIS (CP932) データを MySQL 5.0 に移す

約2年前に書いた MySQL 4.1.x の日本語処理 の続き。 なぜこの話が再燃したかと言うと、MySQL のサイト からは既に MySQL 4.0 のダウンロードができなくなっており、バージョンアップを余儀なくされたからである。

前回は MySQL 4.0.21 から 4.1.9 へのバージョンアップを試みたが、今回は条件が変わり 4.0.26 から 5.0.33 へのバージョンアップになる。 ただし、問題の発生している文字コードまわりの変更は、4.0.x から 4.1.x で発生しているため、ほぼ同じと見なしてよいだろう。

SJIS データを作業手順は以下の通り。 対象データベース名は thedb とする。
作業は全て Win32 (Windows XP Pro SP2) のコンソール (cmd.exe) にて行った。

1. MySQL 4.0 にて、 mysqldump ツールを使用してテキストファイルへエクスポート。
mysqldump -u root -p thedatabase > dump.sql
root ユーザのパスワードを聞かれるので、入力すると dump.sql に thedb の内容が出力される。

2. dump.sql 先頭部分に データベース作成 SQL 文を挿入する。
CREATE DATABASE `thedb` DEFAULT CHARACTER SET cp932 COLLATE cp932_bin;
sjis ではなく cp932 を使用しているのは、元データベースの内容が Windows ファイル名を含んでいるため、データ消失を最小限に抑えるためである。 sjis を使用する場合は適度に読み替えること。

3. 2 の SQL文の次に、データベース指定文を追加する。
use `thedb`;

4. dump.sql 中に、2バイト目に0x5Cを持つ文字が含まれている場合、この文字の次にある “\” 文字を削除する。
例えば、 “表” という文字が含まれている場合、エクスポートしたファイルでは “表\” となっている。 この文字がインポート時にエラーとなるので、後続の “\” を削除する。

Wikipedia: Shift_JIS より 2バイト目に0x5Cを持つ文字には、以下の文字がある:
― ソ Ы Ⅸ 噂 浬 欺 圭 構 蚕 十 申 曾 箪 貼 能 表 暴 予 禄 兔 喀 媾 彌 拿 杤 歃 濬 畚 秉 綵 臀 藹 觸 軆 鐔 饅 鷭 偆 砡 纊 犾

5. MySQL 5.0 にて、mysql ツールを使用して dump.sql をインポートする。
MySQL ツールのコマンドラインにコードセットを指定するのを忘れないようにする。
mysql --default-character-set=cp932 --user=root -p < dump.sql

6. エラーが出た場合は、問題の発生した行を確認、修正を行った後、再度インポート操作を行う。
必要に応じてインポート途中のテーブルを削除する必要がある。

この操作で、インポートを行うと phpMyAdmin では問題なく表示できるようになる。 次は、アプリケーション側の変更を行う。

Comments are closed.