varbinaryで文字化けが直らない・・・

環境
mysql 5.0.66a-log
PHP 5.1.6

mysqlのカラムで「varbinary」タイプを使用しているのだが、sqlで引っ張ってきた文字列の日本語が文字化けしてしまう。
調べてみたところ、DBから取得した文字列の文字コードが全て「utf8」の文字コードで取得されている模様。

my.cnfの設定
default-character-set=ujis
init-connect = SET NAMES ujis
skip-character-set-client-handshake

こちらを見れば分かるように、文字コードは全てujisに統一しているのだが、これで変更される文字列タイプはchar,varchar,text,enum,set型だけらしい・・・

そもそもなぜvarbinaryにしたかというと、こちらを参照

BINARY 値が格納される時、特定の長さまでパッド値で右側が詰められます。パッド値は 0x00 です。(ゼロバイト)値は挿入時には右側が 0x00 で詰められ、選択時に後続バイトは削除されません。全てのバイトは、ORDER BY と DISTINCT 操作を含め、比較において重要です。0x00 バイトとスペースは、0x00 < スペースとなり、比較において異なります。

例:BINARY(3) カラムでは、挿入時 'a ' は 'a \0' になります。'a\0' は挿入時 'a\0\0' になります。選択時、両方の値は変更されません。

VARBINARY では、挿入時に詰められる事も、選択時にバイトが削除される事もありません。全てのバイトは、ORDER BY と DISTINCT 操作を含め、比較において重要です。0x00 バイトとスペースは、0x00 < スペースとなり、比較において異なります。

http://dev.mysql.com/doc/refman/5.1/ja/binary-varbinary.html

要するに'a'と'a 'と'A'は「違う文字」ということを厳密に定義したかったからなのだが・・・orz
ちなみにvarcharとかだと全部「=」の扱いになってしまうらしい!!!!

次はmysqlの今の設定がどうなっているか調べてみる。

mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | ujis                       |
| character_set_connection | ujis                       |
| character_set_database   | ujis                       |
| character_set_filesystem | binary                     |
| character_set_results    | ujis                       |
| character_set_server     | ujis                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

varbinary等はクライアントから送信された文字をそのままDBに入れて、そのままDBから出すって事(合ってる?)だから、クライアントからどのような文字コードmysqlに送信されているかを調べる必要がありそうだ。

現在のクライアントエンコーディングは下記の関数で取得可能。
mysql_client_encoding($link)

$conn = mysql_connect('localhost','hoge','hoge');
print mysql_client_encoding($conn);

結果
latin1

う〜〜んはまってきたな・・・

                                    • -

以下考察

■まだ試してないが、どうやらmysql文字コードを自動化したりしてごにょごにょする機能があるらしい。
http://puchiko.lowtech.ne.jp/?itemid=349&catid=27

mysqlコンパイルする際に

    • with-charset=binary

をして、コンパイル

my.cnfの記述を
[mysqldump]
default-character_set = binary

他にはmysql_set_charset関数を使ってみるとか・・・
誰か分かったら教えてください〜〜(笑)