MySQL4.1.xで日本語が文字化け

2006/03/08 | MySQL

MySQLは、バージョン4.1以降でサブクエリが使えるようになり、随分使い勝手がよくなった。しかし4.1以降で日本語がうまくハンドリングできなくなる。理由はこのバージョンから文字コードの自動変換機能がついたことらしい。
開発で遭遇した問題点と対応した記録をここに掲載する(CentOS4にて)。

【問題】
○CentOS4を日本語環境としてインストール
 /etc/my.cnfをネット上の情報に基づき変更するもうまくいかず。

【対応】
○CentOS4を英語環境としてインストール
 /etc/my.cnfを上記同様に設定(設定内容は以下:赤字を加筆)。
——————————————————————
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
default-character-set=ujis
init-connect=SET NAMES binary

[mysql.server]
user=mysql
basedir=/var/lib
default-character-set=ujis

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set=binary

[mysql]
default-character-set=binary


これでうまくいくと信じ込んでいた。
phpMyAdminを使用して日本語を入力して表示も正常にできた。
いざPHPでプログラムを実行してみるとやっぱりうまくいかない(日本語が文字化けする)。
結局しょうがないので、データベースに接続するphpのコードの直後にクエリを実行させることにした。

SET NAMES binary

しっくりこないんだけど、これでとりあえず解決。

6件のコメント

  1. 秋元@サイボウズ・ラボ :

    phpMyAdmin は、MySQL のバージョンが 4.1 以上の場合に、指定された言語&エンコーディングに従って、内部で SET NAMES, SET CHARACTER SET を呼んでいるようです。ソースを SET NAMES で検索してみると出てきますよ。

  2. かおるん :

    コメントありがとうございます。
    これって結局my.cnfを設定するだけではダメで、SET NAMESしないとだめなのでしょうか・・・。

  3. dink :

    さらに、

    [client]
    default-character-set=binary

    では?

  4. かおるん :

    ———————————
    [client]
    default-character-set=binary
    ———————————
    これいれてもダメですね。

  5. Jason :

    phpのmbstring.http_outputとmbstring.internal_encodingをUTF-8に設定すれば、問題が解決できます。

  6. かおるん :

    PHPの設定って、何に対してのお話で?。PHP全般?、それともphpMyAdmin?。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net