日本語の処理 | ||
日本語の扱いは、MySQL4.0以前と4.1以降では異なる。
|
||
バイナリで入れる MySQL (v3.23.58、v4.0.25) | ||
一番簡単なのは、MySQLの日本語を入れるカラムをBLOB型にして、そこに問答無用でRevから日本語を入れる方法である。 この場合、"UI, japanese"などとしたフィールドの日本語をそのままMySQLに流し込めばよいはず。また、MySQLのディフォルトキャラクタセットがLatin1だろうとsjisだろうと関係ない。 (ここで言うバイナリは、MySQL v4.1のカラムのBinary型とは異なる。)
|
||
文字列としてちゃんと入れる MySQL (v3.23.58、v4.0.25) |
||
次のスクリプトは、VARCHAR型カラムに日本語を入れるためのものである。前述の方法と違い、これだと文字としてMySQLが認識する。
驚くべきことに、v3.23.58とv4.0.25では、MySQLのディフォルトキャラクタセットがLatin1だろうとsjisだろうと関係なく、日本語入力ができる。ただし、Latin1の場合、「表通り」などいくつかの単語で文字化けする。しかし、たいていの日本語は普通にMySQLに入力できてしまう。 次のスクリプトは反対にMySQLのVARCHAR型カラムに格納された日本語文字列をRevの"UI,japanese"型フィールドに入れるものである。説明の都合上、 などで既にstoreDtataにMySQLからの日本語文字列が入っている、と仮定する。
MySQLサーバーのディフォルトキャラクタセットがsjisであってもLatin1であっても上記スクリプトの結果は同じである。
|
||
MySQL v4.1.9 |
||
4.0以前のバージョンはMySQLサーバーのキャラクタセットがLatin1のままでもそれなりにRevからの日本語入力は可能だった。実際にはRevだけでなくphpMyAdminからでもLatin1に日本語がサクサクと入る。 4.1.x以降では、MySQL側のキャラクタセットを、my.cnfの設定もしくは各テーブル、カラムごとの設定でsjis、utf8などにきちんとしておく必要がある。(Latin1だと見事に文字化けする。) さらに難解にしているのは、4.1.x以降ではクライアント側のキャラクタセットがサーバー側のキャラクタセットと一致していないと文字化けになる、ということである。詳しい説明はMySQL日本ユーザー会にたくさんあるが、そこに書かれた「4.1の壁」という言葉は、いかに多くの日本人がこの問題に悩んだかを示している。 ●対処法 どうやら、これはクライアント側のその時のキャラクタセットが何であるかをMySQLに宣言するコマンドらしい。phpとMySQLで文字化けする場合も、このコマンドは有効である。 それでも直らない場合、
などの原因で文字化けするらしい。前者の場合、「AddDefaultCharset none」にすればよい。http://www.mysql.gr.jp/mysqlml/mysql/msg/11901 後者の場合、これを「default_charset="Shift_JIS"」とするとよいようです。 php.iniは、/etc/php.ini、MySQLの設定ファイルmy.cnfは普通はroot/etc/にある。
|
||
設定ファイルの場所 php.iniは、/etc/php.ini MySQLの設定ファイルmy.cnfは普通はroot/etc/にある。 httpd.confは、/etc/httpd/conf/httpd.confにある。
|
||