MySQL関係 - (2009/03/03 (火) 08:14:30) の編集履歴(バックアップ)
sjisでの文字化けを回避するための方法
MySQLの設定
mysql> SHOW VARIABLES LIKE 'character\_set\_%'; +--------------------------+--------+ | Variable_name | Value | +--------------------------+--------+ | character_set_client | cp932 | | character_set_connection | cp932 | | character_set_database | cp932 | | character_set_filesystem | binary | | character_set_results | cp932 | | character_set_server | cp932 | | character_set_system | utf8 | +--------------------------+-------- 7 rows in set (0.00 sec)
● システム変数の用途
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 にセットすると、結果に対する文字コード変換をしないよ うにできる。
Linux での mysql.cnfの設定
win用と同じ設定にしてもうまくいかなっかった。グローバル値は上記のようになったが、セッション値はujisになった。よって自動変換をしないようにskipしたら直った。
自前のアプリでの注意
MySQLとconnectした後にset names sjis;を発行する。
null の演算
- Accessの場合はNz()関数
- MySQLではcoalesce() 関数は、最初の null でないデータを返す。 coalesce($変数,0)
select coalesce(null, 'abc', 'def'); +------------------------------+ | coalesce(null, 'abc', 'def') | +------------------------------+ | abc | +------------------------------+