現在XOOPSのDATABASEの文字コードはEUCーJPである。これはXOOPSのバージョンが2.0.16だった頃からの遺産である。そろそろUTFにしようと思う。 OSはCentOS6.7なのでこちらは既にUTFであるので、データーベースの文字コードを変更する。その前に現在の状況を把握する。まずはデーターベース、mysqlにログイン # mysql -u ユーザー名 -p パスワードを聞かれるので入力 mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
全部 UTF8(もちろんファイルシステムとDIRは違う) XOOPSで使用しているデーターベースの各テーブルの文字コード(mysqlは各テーブルに文字コードを設定できる) mysql> show table status from データーベース名; でテーブルの設定が表示されるので、Collation の所を見ると全部 ujis_japanese_ci になっていたので、EUC-JPである。 続いてPHPの設定の確認、 # gedit /etc/php.ini抜粋
;default_charset = "iso-8859-1"
;mbstring.language = Japanese
;mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
;mbstring.http_output = SJIS
;mbstring.encoding_translation = Off
;mbstring.detect_order = auto
;mbstring.substitute_character = none;
;mbstring.func_overload = 0
;mbstring.strict_detection = Off
;mbstring.http_output_conv_mimetype=
全部コメントアウトしてある(php.iniは ;(セミコロン)がコメントである) 私の自宅サーバーのapacheはバーチャルホストの設定があり、自身が管理していないWEBがあり、UTFー8、shift-jis、EUCーJPを使用している。 一様 mysqlの設定も # gedit /etc/my.cnf# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
innodb_buffer_pool_size = 256M
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
datadir=/XXXXXXX/XXXXXX デフォルトから変更してある
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
#symbolic-links=0
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character-set-server = utf8
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
ここから本題、二つの方法を書いておく。どちらかでいい、まずは phpMyAdmin を使う方法 XOOPSのデーターベースを選んでから、右ペインの上のタブで エクスポート をクリック、その後、実行をクリックすると、開くか保存か聞いてきますので、保存を選び、OKをクリック、次に保存場所を聞いてきますので、適当に選びOK。すると選んだデーターベース名.sqlというファイルが保存されます。このファイルの文字コードはOSのコードつまりUTF−8で保存されています。 但し、このファイルには各テーブルの文字コードがujis(EUC-jp)になっていますので、utf8に変更します。 # cat データーベース名.sql | sed -e 's/ujis/utf8/g' > データーベース名-1.sql これで、インポートする時にテーブルの文字コードはUTF-8になります。 次にインポートしますが、その前にデーターベースを作ります。 画像2の右ペインの上の データーベース タブをクリック(左ペインで、データーベースを選んでいると、このタブが表示されませんので、PhpMyAdminのロゴの下、一番左をクリックすると表示されます)。データーベース名を適当に付け、照合順序を utf8_general_ci にし、作成をクリックすると、データーベースが作成されます。
作成されたデーターベースを選び(画像3)右ペインで インポート タブをクリック、参照をクリックし、先ほど保存したデーターベース名-1.sqlを選び、ファイルの文字セットがUTF-8になっているのを確認し、実行をクリックすると、インポートされます。 インポートは正常に終了しました。と表示がでたらOKです。 その後、作ったファイルを削除する(データーベース名.sqlとデーターベース名-1.sql。セキュリティーの為)
次はphpMyAdminを使わないでやる方法 Xoopsで使用しているデーターベースをバックアップする。 # mysqldump -u ユーザー名 -p --databases XOOPSのデーターベース名 > xoops.sql
このファイルの文字コードを調べる(OSの文字コードの筈だが)端末の上部メニューの 端末(T)、文字コードの設定(C)とクリックし、Unicode(UTF-8)が表示されるのを確かめて # cat xoops.sql これで端末上にデーターが流れるように表示される(データー量が多いので)その時、漢字が文字化けしていなければ、このファイルの文字コードはUTF-8である。 見にくい時は more を付けて # cat xoops.sql | more でスペースを押すと、次になるので漢字が表示される所までやる。確認後 ctrl+c で終わらせる。 確認が出来たら xoops.sql を編集しますが、する事はデーターベース名の変更(変更しないとオリジナルのデーターベースに上書きするので)各テーブルの文字コードをutf8にする。 # cat xoops.sql | sed -e 's/XOOPSのデーターベース名/新データーベース名/g' -e 's/ujis/utf8/g' > xoops4.sql 出来た xoops4.sql をmysqlにインポートします。 # mysql -u ユーザー名 -p < xoops4.sql パスワードを聞かれますので入力。 これで、新データーベース名でデーターベースが出来ていることを確認しておきます。 又、セキュリティーの為、作ったファイル(xoops.sqlとxoops4.sql)を削除しておきます。 これでやっとデーターベースの各テーブルの文字コードとデーターの文字コードがUTF-8になりました。
ここからはXOOPSの設定 まずはデーターベースを変更する # gedit XOOPSのルートディレクトリー/mainfile.php // Database Name
// The name of database on the host. The installer will attempt to create the database if not exist
define('XOOPS_DB_NAME', 'UTF8にした新データーベース名'); ←データーベース名を変更
保存したら、 つぎはXoopsのwebに管理者としてログイン後、ユーザーメニューの管理者メニューをクリック、左ペインの SYSTEM ADMIN をクリック後、一般設定、もう一度一般設定で画面を開き(画像5)使用言語を ja_utf8 にしてから、下にスクロールダウンし、送信をクリック。 アレー文字化けはしていないが、文字コードを確認するとEUC-JPのままだ、UTF-8にすると文字化けする。 色々悩んだが、思い出した、このXOOPSはJPExを使っていた。確か何処かに文字設定があった筈、やっと include/ini_settings.php を見つけ<?php
/**
;Example: If your database character is EUC-JP, it should be ujis.
;Example: If your database character is UTF-8, it should be utf8.
;charcode=utf8
*/
charcode=utf8 ここをujisからutf8に変更
?>
これを保存し、ブラウザでアクセスし、文字コードを確認するとUTF-8になっていた。 但し、一部に文字化けがあるので、多分キャッシュのせい、 XOOPSのルートディレクトリーにある、二つのディレクトリー(cacheとtemplate_c)の中身を全て削除し、再度アクセスすると文字化けは無くなっていた。 私の場合はXOOPSにJPExを使っているので、Language以下の定数が漢字で定義している部分などは既にutf-8ようがあるので、問題ないが、他のバージョンでは多分必要、他にも文字コード変更が必要かも?
|