MySQL4.1X対策 †
MySQLサーバのバージョン4.1以上でXOOPS 2.0.13a JPを使用する場合、MySQLのクライアント文字セットを明示的にMySQLサーバに通知する必要があります。現時点(2005/11)のXOOPSではこの機能がサポートされておらずXOOPSのソースコードを変更する必要があります。
D:\WWWRoot\xoops\class\database\mysqldatabase.php
※ D:\WWWRoot\xoopsはXOOPSのインストールフォルダです。
mysqldatabase.php
class XoopsMySQLDatabase extends XoopsDatabase { /** * Database connection * @var resource */ var $conn;
/** * connect to the database * * @param bool $selectdb select the database now? * @return bool successful? */ function connect($selectdb = true) { if (XOOPS_DB_PCONNECT == 1) { $this->conn = @mysql_pconnect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS); } else { $this->conn = @mysql_connect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS); }
if (!$this->conn) { $this->logger->addQuery('', $this->error(), $this->errno()); return false; }
if($selectdb != false){ if (!mysql_select_db(XOOPS_DB_NAME)) { $this->logger->addQuery('', $this->error(), $this->errno()); return false; } } // MySql>=4.1 ////////////////////////////////////////////////////////////// mysql_query("SET NAMES ujis", $this->conn); //////////////////////////////////////////////////////////////////////////// return true; } ・・・・・ }
追加するソースコードの以下の部分です。
// MySql>=4.1 ////////////////////////////////////////////////////////////// mysql_query("SET NAMES ujis", $this->conn); //////////////////////////////////////////////////////////////////////////// より汎用的なコードを記述するには、MySQLのバージョンを取得して、MySQL4.1以上の場合のみ"SET NAME"するようにします。MySQLの文字セットに関しては「MySQL4.1/9.MySQLの実験/3.漢字の使用」を参照して下さい。
MySQL4.1以降ではMySQLクライアントとMySQLサーバ間で文字コードの変換機能が追加され、それによって弊害(文字化け)が起きていた。
■対策方法■
phpMyAdmin等でデータベースの文字セットをujisに変更
XOOPS/class/database/mysqldatabase.phpに下記のコードを追加
/class/database/mysqldatabase.php
236行目付近の$result =& mysql_query($sql, $this->conn); の上に
mysql_query("SET CHARACTER SET ujis", $this->conn);
を追加
url(http://mynoah.net/archives/xoops.php):引用
せめて
mysqldatabase.php
にCHARACTER SET くらいいれてください
$rs = mysql_query("select version();", $this->conn);
if($rs <> FALSE) {
$col = mysql_fetch_row($rs);
if ($col[0] > "4.1.0") {
mysql_query("SET CHARACTER SET ujis", $this->conn);
}
mysql_free_result($rs);
}