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

Comment Form

Remember Me?


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

Return to Page Top