みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHP+MySQLでSJISからEUCへの文字コード変換方法を教えてください。

こんにちは。いつもお世話になっております。本来であれば自サーバーで検証してから質問すべきだとは思いますが、現在稼動中のサーバーしかなく、止めることができないので質問させていただきます。

現在、PHP+MySQLでサイトをSJISコードで運営しておりますが、「表」「能」等のSJISの文字化け対策が面倒になってきまして、EUCに変換してしまおうかと検討しております。
現状の日本語に関する設定は下記のようになっております。

▼MySQL(my.cnf) バージョン:4.1.20
[mysqld]
default-character-set=sjis
init_connect="SET NAMES sjis"
[mysql.server]
default-character-set=sjis
[mysqldump]
default-character-set=sjis
[mysql]
default-character-set=sjis
▼PHP(php.ini) バージョン:4.3.9
mbstring.internal_encoding = SJIS
mbstring.http_input = pass
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto

PHP内でMySQLと接続した直後に次のようにSJISを指定しています。
$sql="SET NAMES sjis";
mysql_query($sql);

ちなみに、MySQLはMySQLadminで管理しておりますが、テーブルの照合順序は全てsjis_japanese_ciになっています。

上記のような内容ですが、この場合SJISからEUCに変換する場合の手順として、下記の流れでよろしいでしょうか?
1.PHPファイルをEUCコードに変換。
2.php.iniのSJISの部分をEUCに変換。
3.MySQLの設定ファイルのsjisの部分をujisに変換。
4.MySQLのテーブル内のデータを全てエクスポートして、外部エディタでEUCに変換後インポートする。

特に上記4の作業はテーブル数及びデータが膨大なため結構な作業になってしまいそうです。

もしもっと楽な方法があればご教授いただければ幸いです。なお、サーバーはRed Hat Enterprise Linuxです。

投稿日時 - 2007-03-16 12:50:26

QNo.2838040

困ってます

質問者が選んだベストアンサー

MySQLの文字コード設定の中途変更を行ったことがないので、杞憂かもしれませんが、
MySQLの文字コード設定を変更する前に、
3.MySQLのテーブルを、LOCK TABLES を実行してから、FLUSH TABLES を実行したのち、データを全てエクスポート
をまず行った方がよいと思います。でないと異なる文字コードとして(化けて)書き出される可能性は否定できないかと。
作業中にデータの変更が行われないようロックも必要でしょう。
http://dev.mysql.com/doc/refman/4.1/ja/lock-tables.html
http://dev.mysql.com/doc/refman/4.1/ja/flush.html

その後
4.MySQLの設定ファイルのsjisの部分をujisに変換。
5.エクスポートしたファイルを外部エディタでEUCに変換後
6.UNLOCK TABLES を行って、全行削除して、全行インポートする。この作業に掛かる時間帯は、他からアクセスされないようにする必要あり。

それで、エクスポートはどのように行う予定でしたか?
SELECT INTO OUTFILE で書き出しておけば、エディターでの編集可能なテキストファイルとして書き出せて、さらにインポートは LOAD DATA INFILE で簡単に取り込めます。
サーバー内のデータ領域に余裕があれば、結構高速処理のようです。
http://dev.mysql.com/doc/refman/4.1/ja/select.html#id3062265
http://dev.mysql.com/doc/refman/4.1/ja/load-data.html

あと、table数が多いとのことなので、エクスポート用とインポート用のsqlの発行を、phpからtable変更しながら行うプログラムを作ってしまえれば、table変更をMySQLadminで手作業するよりは、はやいでしょう。

投稿日時 - 2007-03-16 16:33:57

お礼

アドバイスどうもありがとうございます。
とても参考になりました。そうですね。手作業で行なうよりプログラムを作って自動でテーブルの処理をすれば楽ですね。
焦らずにミスが無いようじっくりと対処していきたいと思います。

投稿日時 - 2007-03-19 18:40:46

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問