サイト開設時はXOOPSの文字コードをEUCでインストールし、しばらく運用していましたが、
XOOPS CubeあたりからUTF8が主流になってきたので、思い切ってUTF-8に変換しました。

XOOPSのEUC→UTF-8化 anchor.png

XOOPSをUTF-8化するには、以下の2つの作業が必要です。

  1. mysqlデータベースをUTF-8化する
  2. XOOPSのモジュールをUTF-8化をする
Page Top

mysqlデータベースをUTF-8化する anchor.png

まず、mysqlデータベースのUTF-8化。

Page Top

mysqlデータベースのエクスポート anchor.png

mysqlデータベースをいったんファイルにエクスポートし、文字コードを変換してインポートしなおします。
今までDBをlat1n1 とかいうおかしな言語で作ってしまっていたので、普通に以下のようにエクスポートすると、
latin1でデータがエクスポートされちゃう問題が起こります。
xoopsデータベースをエクスポートする例;

mysqldump -u root -p xoops  > export.dat

なので、いったんdefault-character-setオプションで強制的に文字コードを"バイナリ"を指定してエクスポートします。
default-character-setを指定しないと、mysqlのデフォルト設定(ここではlatin1)で指定された言語で
勝手に文字コード変換されてしまうようです。

mysqldump -u root -p xoops --default-character-set=binary > export.dat

ちなみにこれは、/etc/mysql/my.confの

[mysqldump] 
default-character-set=binary 

でも同じ設定なのだろうと思います。

データベース単位ではなく、mysqlのすべてのデータをバックアップするならば、

mysqldump -u root -p --all-databases  --default-character-set=binary > export.dat

です。

データベースをどの文字コードで作ったかを調べる方法は、
データベースの文字コードを見たい場合:

show create database データベース名;

全般設定の中の文字コード関連設定項目を見たい場合:

show variables like 'char%';

この他にも、テーブル毎に文字コードが設定できるようです。

mysqlのエクスポートについて、文字コードの変換については以下が参考になります。
親父の日記・備忘録
http://www.toemon.com/modules/xpress/?p=165

Page Top

charset変換 anchor.png

mysqlファイルの中をエディタで開いて、charsetを変換します。

DEFAULT CHARSET=latin1

となっているところを

DEFAULT CHARSET=utf8

に変更。
xpwiki関連のvarcharのclreateについても、latin1を指定しているところがあったので

 `name` varchar(255) character set latin1 collate latin1_bin NOT NULL,

 `name` varchar(255) character set utf8 collate utf8_general_ci NOT NULL,

てな感じに変更。

Page Top

データのインポート anchor.png

現在のデータベースをいったんdropしておきます。

DROP DATABASE xoops

データベースをcreate(utf8で)

CREATE DATABASE xoops DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

エクスポートしたデータをインポートします。
ここでcharsetはutf8指定。

mysql -u root -p xoops --default-character-set=utf8 < export.dat
Page Top

xoopsのUTF-8化 anchor.png

次に、xoopsのファイル群をUTF-8化します。
xoops cube legacy を無理やりEUCで使っていた場合は
xoops/preload 下に、

define("LEGACY_JAPANESE_ANTI_CHARSETMYSQL", true);

を含むphpファイルがあったりするかも知れません。
XC2.1への移行の際、文字化けした経験のある人ならば置いている可能性があります。
これを削除します。

language/ja-utf8 とか、各モジュールの下のlanguageの下にja-utf8フォルダを用意したりします。

/etc/php5/apache2/php.ini の文字コードも変えないといけないかも知れません。

mbstring.internal_encoding = UTF-8

<参考>
php.iniの設定
http://www.hizlab.net/app/phppg.html




Page Top

comment anchor.png