「MySQL関係」の編集履歴(バックアップ)一覧に戻る

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                          |
+------------------------------+
人気記事ランキング
目安箱バナー