[前][次][番号順一覧][スレッド一覧]

mysql:3192

From: Toshihiro Fujimori <Toshihiro Fujimori <fuji@xxxxxxxxxx>>
Date: Wed, 07 Feb 2001 21:46:08 +0900
Subject: [mysql 03192] Re: バイナリーデータの扱いについて

Mitsuru Marunoさんの<003101c090b3$abb02f50$6b01a8c0@maru>から
>INSERT INTO文でバイナリを16進表記文字列に変換して挿入できました。

一応、回避策が見つかったということで、
以下蛇足になるかもしれませんが・・・

サーバのソースを眺めてみると、エスケープ処理が含まれる関数では、
ほとんどが、
1. マルチバイト文字の処理
2. エスケープ処理
という順番になっていて、しかも 1. にマッチした場合は、
2. はスキップされています。

ということで、SJIS 版サーバで 0x88 0x5c という文字列は
マルチバイト文字の方にマッチしてしまい、エスケープを
取り除く処理がスキップされてしまうのだと思われます。

ただ、そうなると、php で addslashes() を使った場合も、
同じ現象になるはず・・・?

# 以下、さらに余談

Mitsuru Marunoさんの<005301c090a5$9562fd30$6b01a8c0@maru>から
>ソースを見てみましたが、libmysqlプロジェクトでは、やはり
>mysql_real_escape_string関数をエクスポートしていませんでした。
>また、mysql_real_escape_stringとmysql_escape_stringを見てみると
>両者ともmysql_sub_escape_string関数を呼び出しているだけので、
>内容的には全く同じ物ですね。。。

エクスポートされてなくても、static link で使えるのでは
ないでしょうか。
ドキュメントにも以下のように書かれてますし。
>> 22.1 MySQL C API
>>  C API コードは MySQL とともに配布されます。これは
>>  libmysqlclient ライブラリに含まれ、C プログラムから
>>  データベースへのアクセスを許します。 

それから、ソースにあるように、mysql_escape_string() とは違い、
mysql_real_escape_string() の処理は charset によって変化するので、
例えば、0x95 0x5c というバイナリを変換する場合、
SJIS の場合、マルチバイトとして扱われるので、そのまま -> 0x95 0x5c
EUC の場合は、エスケープ処理される -> 0x95 0x5c 0x5c
となるように思えます。
最終的には、INSERT して SELECT すると、
SJIS・・・ そのまま -> 0x95 0x5c
EUC ・・・ エスケープを取り除く -> 0x95 0x5c
となって、同じ結果ではありますが。

-- 
Toshihiro Fujimori (藤森 利浩)
Taisei Inc.
PGP Key ID: 0xBE1C7568 (DH/DSS)
http://www.rcc.or.jp/%7Efuji/


[前][次][番号順一覧][スレッド一覧]

      3156 2001-02-05 16:31 ["Mitsuru Maruno" <ma] バイナリーデータの扱いについて          
      3158 2001-02-05 23:19 ┣[Toshihiro Fujimori <]                                       
      3160 2001-02-06 10:26 ┃┗["Mitsuru Maruno" <ma]                                     
      3161 2001-02-06 10:43 ┃ ┗[Yoshiyuki Asano <asa]                                   
      3162 2001-02-06 11:06 ┃  ┗["Mitsuru Maruno" <ma]                                 
      3163 2001-02-06 12:56 ┃   ┗[Yoshiyuki Asano <asa]                               
      3164 2001-02-06 13:24 ┃    ┣[Yoshiyuki Asano <asa]                             
      3165 2001-02-06 13:32 ┃    ┗["Mitsuru Maruno" <ma]                             
      3166 2001-02-06 14:07 ┃     ┗[Yoshiyuki Asano <asa]                           
      3168 2001-02-06 14:30 ┃      ┣["Mitsuru Maruno" <ma]                         
      3169 2001-02-06 14:52 ┃      ┗[Akihiko Shinohara <s]                         
      3170 2001-02-06 15:09 ┃       ┣[Yoshiyuki Asano <asa]                       
      3171 2001-02-06 15:11 ┃       ┗["Mitsuru Maruno" <ma]                       
      3172 2001-02-06 17:02 ┃        ┗[Tomohiro KATO <tomop]                     
      3173 2001-02-06 17:19 ┃         ┗["Mitsuru Maruno" <ma]                   
      3174 2001-02-06 17:28 ┃          ┣[Tomohiro KATO <tomop]                 
      3182 2001-02-07 10:11 ┃          ┃┗["Mitsuru Maruno" <ma]               
      3175 2001-02-06 17:29 ┃          ┗["Mitsuru Maruno" <ma]                 
      3179 2001-02-06 23:45 ┃           ┗[Toshihiro Fujimori <]               
      3180 2001-02-07 00:41 ┃            ┣[Toshihiro Fujimori <]             
      3183 2001-02-07 10:30 ┃            ┗["Mitsuru Maruno" <ma]             
      3184 2001-02-07 10:50 ┃             ┗[Akihiko Shinohara <s]           
      3185 2001-02-07 11:13 ┃              ┗["Mitsuru Maruno" <ma]         
      3186 2001-02-07 12:11 ┃               ┗["Mitsuru Maruno" <ma]       
      3187 2001-02-07 12:57 ┃                ┣[楠吉彦  <moredebu@xx]     
      3188 2001-02-07 15:29 ┃                ┣[Akihiko Shinohara <s]     
      3189 2001-02-07 15:35 ┃                ┃┗[Akihiko Shinohara <s]   
      3190 2001-02-07 16:02 ┃                ┃ ┗["Mitsuru Maruno" <ma] 
      3191 2001-02-07 18:18 ┃                ┃  ┗[Akihiko Shinohara <s]   
->    3192 2001-02-07 21:46 ┃                ┗[Toshihiro Fujimori <]     
      3195 2001-02-08 01:16 ┃                 ┗[とみたまさひろ <tomm]   
      3177 2001-02-06 23:05 ┗[Tomohiro Takahashi <]