いよいよ、データベースの項。ちょっと敷居が高くなる。
OpenPNEに関わらず、ほとんどのCMS(コンテンツマネージメントシステム)は、PHPとMySQLを用いた、(つまりスクリプト言語とデータベースの連携で)システムとなっているので、MySQLは避けて通れない。Perlだけで記述されたものもあるが、セキュリティ面はあまり高くはないようだ。
ただし、ほとんどのCMSはMySQLのコマンドをあらかじめ用意してくれたり、インストーラーで設定までしてくれるものもあるので、ほとんど知識はなくとも、なんとかなる場合が多い。特に、X-serverやX-rea等、コンパネでSQLの設定ができたりすると、ほとんど問題になることはないのだが。
今回は、クララオンラインのVPSにインストールした際に、ちょっと問題になった点を中心に挙げる。
4. MyNETS 用データベースの作成
インストーラを利用してインストールする場合は、下記のテーブル作成はインストーラーが行います。
テーブル作成はインストーラーが...というところは、SQLコマンドをあらかじめ用意してくれているので、MySQLを直接自分で編集することはないので、ここは問題なし。
4-1. MySQL 4.1 の場合
新しくデータベースを作成する場合、以下のようなSQLクエリを実行してデータベースを作成します。CREATE DATABASE `DBNAME` DEFAULT CHARACTER SET utf8 ;
準備したデータベース(例:DBNAME)上で、以下のSQL文を順番に実行してください。OPENPNE_DIR/setup/sql/MySQL4.1/install/install-mynets1-1-0-create-mysql41.sql
OPENPNE_DIR/setup/sql/MySQL4.1/install/install-mynets1-1-0-insert_data.sql
[実行例]
$ mysql -u username -p --default-character-set=utf8 DBNAME < install-mynets1-0-0-create-mysql41.sql
$ mysql -u username -p --default-character-set=utf8 DBNAME < install-mynets1-0-0-insert_data.sql
X-serverはMySQLのバージョンが4.0だったので、下記の手順で問題なかったのだが、クララのMySQLは、5.0バージョンであったので、この項目があてはまることになる。実は、この4.0と4.1というのはなかなか壁が高いらしい。特に2バイト文字を扱う場合は特に。バージョン4.1から、サーバー、クライアント、PHP.MySQLと、それぞれの言語を分けることができてしまうのだ。ということは逆にそれぞれの言語が同じじゃないと文字化けをしてしまうという道理になるわけだ。
ここに気が付いたのは、かなり経ってから。当初、上記手順通りにすすめていって、何度やっても文字化けをするので、困り果ててしまった。
いくつか、ミソなのが、一つは、SQLコマンドを入力する方法がいくつかあること。SSHからMySQLを呼び出して、コマンドを送信する方法と、PHPMyAdmin等を用いてウェブから送信する方法とがあるのだが、私は、SSHからのコマンドの入力はできないので、PHPMyAdminやWebminを用いて送信したのだ。しかし、ウェブ経由だと、上記コマンドのうち、--default-character-set=utf8の部分を送信できないのである。多分方法はあるのであろうが、分からない。そこで、SQLファイルをアップロードするような形で送信するのだが、その方法では、言語の指定ができないのである。これは困った。何度やっても、文字化けするだけである。
そして、色々調べた結果、MySQLのデフォルト言語が、どこかの部分で(クライアントかなにか)Latinになっているらしく、utf8で送ろうが、EUCで送ろうが、結局は文字化けしてしまうのだ。
で、結果から言うと、Webminから、MySQLのコンパネでMySQLのiniファイルを変更することで、MMySQLの言語を全てutf8に統一することができる。統一すると、PHPMyAdminでファイル送信しても、文字化けせずに表示されるようになった...。
つまり、my.cnfの[mysqld]ディレクティブに、
[mysqld]
default-character-set=ujis
skip-character-set-client-handshake
を書き込む。下段は、クライアントとの文字コード調整をしないようにするものらしい。上段には、euc-jpを用いる場合は、ujis、UTF-8の場合は、utf-8と指定することになるようだ。
参考サイト
http://wota.jp/ac/?date=20061011
ここでも、やや一週間はかかっただろうか...。