MySQL4.1になると文字化けが発生する件

2007.06.27

画像 - MySQL4.1になると文字化けが発生する件

Mysql4.1以降は、PHPとの接続時に文字コードの自動変換機能の為文字化けする場合があります。

WordpressとNucleusで文字化けが発生した際にコアファイルを修正します。

Mysql4.1以上の文字コードの設定

最近仕事でもCMSツールを使ってサイト構築することがあります。

会社で使っているサーバーがMysql4.1なのですが、Mysql4.1以上だと、普通にインストールするとデーターベース側が文字化けするという問題が出てきます。

なぜなら、Mysql4.1以降は、PHPとの接続時に文字コードの自動変換機能が働くので、サーバー側の文字コードを勝手に変換してしまうんです。

サーバー側に文字コードが指定されていない場合、「laten1」などで出力されてしまうので、コアファイルを書き換えてエンコーディングを発行します。

Nucleusの設定 (nucleus3.3)

nucleus/lib/globalfunctions.php - 488行目に次の1行を挿入

$rtn = mysql_query("SET NAMES utf8" , $MYSQL_CONN);

nucleus/lib/globalfunctions.php

function sql_connect() {
	global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_CONN;
	$MYSQL_CONN = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD) or startUpError('Could not connect to MySQL database.', 'Connect Error');
	mysql_select_db($MYSQL_DATABASE) or startUpError('Could not select database: ' . mysql_error() . '', 'Connect Error');
       $rtn = mysql_query("SET NAMES utf8" , $MYSQL_CONN);
 	return $MYSQL_CONN;
}

07/09/14 訂正 - 正常動作確認しました。

Wordpressの設定 (Wordpress ME2.2.3)

07/10/26 修正 - 2.1.3から最新版に修正しました。

wp-includes/wp-db.php - 78行目に次の1行を挿入

mysql_query("SET NAMES utf8", $this->dbh);

wp-includes/wp-db.php

function wpdb($dbuser, $dbpassword, $dbname, $dbhost) {
	return $this->__construct($dbuser, $dbpassword, $dbname, $dbhost);
}
function __construct($dbuser, $dbpassword, $dbname, $dbhost) {
	register_shutdown_function(array(&$this, "__destruct"));
	/* .........略     */
	mysql_query("SET NAMES utf8",$this->dbh);
	$this->select($dbname);
	}

これで文字化けが解消されました。

文字コードがUTF-8以外の場合は、ujis,eucに書き換えて下さい。

Technorati Tags
Mysql Nucleus Wordpress
TrackBack URL
このエントリのリンクを作成
Comment Form

スタイル指定用の一部の HTMLタグが使用できます。