Two or Three things I got to know about MySQL and PHP..
- Date
- 2005-09-07 (Wed)
- Category
- Tech
日本語を使う可能性のある MySQL やら PHP のプログラムはしたことなかったので、ちょっとメモ。
全部あってるはずなんだが…うまくいかない。さてどこが間違っているのやら…
その実は Column を作るときに character set latin1 としていたからでした。正解はもちろん、character set utf8 です。なんとも情けない。
MySQL 4.1.13 の内部は基本的に UTF-8 で動いているので、コンパイルする必要はなさそう。[mysql 09586] Re: MySQL 4.1.2 の日本語の扱い が詳しいけれども、大事な部分を引っ張ると、
mysql> show variables like 'character\_set\_%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | character_set_client | ujis | | character_set_connection | ujis | | character_set_database | utf8 | | character_set_results | ujis | | character_set_server | utf8 | | character_set_system | utf8 | +--------------------------+-------+
● システム変数の用途character_set_system
"indentifiers" (テーブル名とかカラム名?) を格納するのに使われる。utf8で 固定。character_set_server
character_set_database のデフォルト値に影響する。character_set_database
CREATE DATABASE で文字コードが指定されなかった場合、database の文字コードはこれになる。character_set_connection の値に影響する。(後述)character_set_client
クライアントから渡された SQL 文はこの文字コードであると解釈される。character_set_connection
キャラクタセットイントロデューサ (例えば『_ujis'ほげ'』)が省略されたSQL 文中の文字列リテラルはこの文字コードであると解釈される。character_set_results
サーバーがクライアントに返す結果をこの文字コードに変換する。この変数を NULL にセットすると、結果に対する文字コード変換をしないようにできる。
ということなので、SHOW VARIABLES LIKE "char%"; で帰ってくるのが全てが utf8 になるように調整しないと。個々の DATABASE を変換するのは
ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin ALTER TABLE `table_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
でオッケーっぽい。最初は DB だけやって満足してましたが、実は TABLE をやらないと意味がなさそう。
その他 今頃MySQL4.1系と格闘 もよくまとまってます。
クライアントサイドのPHP は、普通の MySQL サポートだと、文字コードについてかなり乏しいので、mysqli 系を使う必要がある。ざっと見て記述が見つからなかったけれども、どうやら PHP 5 以上でないと使えない感じ?5.0.5もでたからついでに最新版もゲット。というわけで、コンパイルオプションは以下。
./configure \ --with-apxs2=/usr/local/sbin/apxs \ --without-mysql \ --with-mysqli=/usr/local/bin/mysql_config \ --with-curl=/usr/local/include/curl \ --enable-mbstring \ --enable-mbregex \ --with-libxml-dir=/usr/local/include/libxml2/libxml \ --disable-ipv6 \ --with-gettext=/usr/local/bin/gettext \ --enable-soap
ちなみに上の設定だと標準 MySQL サポートが使えなくなるので、PhpMyAdmin も動かなくなる。@IT会議室 > Database Expert 会議室 > phpMyAdminにログインできないにあるように
MySQL4.1以降に接続する場合にはconfig.inc.phpファイルの設定で$cfg['Servers'][$i]['extension'] = 'mysqli';とすると接続できるようになります。
とするとよい。
直接は関係ないけど、このあいだ Windows XP に Apache + MySQL + PHP な環境を作ったけれども、そっちで同じことしようと思うと苦労しそうだなぁ。PHP のバイナリ配布版だと MySQL Client ライブラリが確かめちゃくちゃ古いんだよね。コンパイルできないのは非常にうっとおしい。上のスレッドにもある、OLD_PASSWORD の問題もあるし。Windows 版 MySQL は Services (Boot 時に自動起動するための仕組み?)への登録設定を除けば、非常に良くできた Wizard が付いていて好感触でしたが。
Comment:0
Trackback:0
- TrackBack URL for this entry
- http://blogs.grf-design.com/mt/mt-tb.cgi/111
- Listed below are links to weblogs that reference
- Two or Three things I got to know about MySQL and PHP.. from The Croton