2015年4月23日木曜日

phpMyAdmin上の文字化け対策

EC-Cubeでショッピングサイトを運用しているお客さんのサイトをリニューアルするということで、ついでに既存のくたびれていたサーバーから新しいサーバーへのお引っ越し。

商品のデータベースはそのまま利用するとのことで、まずはPleskのマイグレーションを利用して新しいサーバーにまるごと移転させたのだが、データベースの編集を行おうと"phpMyAdmin"で開くとデータだけが文字化けして読めない状態。(Webサイト上では正常に閲覧できる)


Pleskのマイグレーション時にデータベースの変換ミスかとおもいきや、オリジナルのサーバーにあるデータベースも既に文字化けしていた...。orz

調べてみると過去EC-Cubeのインストール時、そのままMySQLデータベースを利用すると格納する文字コードがLatin1になって文字化けしてしまう事があったもよう。(憶測)
いずれにしても既に構築されてしまったデータベースが文字化けしているものは直す以外手立てがない。

今回以降すべてrootでのコマンド作業です。

1)まずは既存のデータベースのダンプを作成。
※Pleskの場合データベースユーザーパスワードがLinuxのシステムとは別に管理されているため、通常のLinuxパスワード入力方法ではアクセスが出来ないので注意が必要です。

# mysqldump -u [db_user] -p`cat /etc/psa/.psa.shadow` [db_name] > [db_name].sql --default-character-set=latin1

2)書きだしたデータベースの文字コードを変換。

# perl -pi -e 's/latin1/utf8/' [db_name].sql

3)mysqlコマンドでデータベースの作り直し。

# mysql -u [db_user] -p`cat /etc/psa/.psa.shadow`
mysql> drop database [db_name];
mysql> create database [db_name] default character set utf8;
mysql> quit

4)作りなおしたデータベースに文字コードを修正したデータの読み込み。

# mysql -u [db_user] -p`cat /etc/psa/.psa.shadow` [db_name] < [db_name].sql

とりあえずこれで"phpMyAdmin"から閲覧するデータの文字化けは直りました。


ただ今度はWeb上で表示するのデータが文字化けしてしまう状態になってしまったので、EC-Cubeの設定で文字コード(utf8)を強制指定して回避しました。

 参考になったサイト:EC-CUBEをMySQLで動かして文字化けが起こるとき(インディゴWEB研究室)

オリジナルのサイト構築時に既にしくじってたって事ですね...。
これで何とかWeb上でもphpMyAdmin上でも文字化けしないで閲覧できるようになりました。

0 件のコメント :

コメントを投稿