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

mysql:600

From: 民斗 <民斗 <tommy@xxxxxxxxxx>>
Date: Tue, 19 Jan 1999 09:41:32 +0900
Subject: [mysql 00600] Re: PHP3 -> MySQL_SJIS ミニレポート

民斗です。

[Subject: [mysql 00598] PHP3 -> MySQL_SJIS ミニレポート]
[Date: Tue, 19 Jan 1999 03:40:26 +0900  From:Masato Toyoshima]

> ただし、氏名検索で「圭介」の字などを検索させると、結果は無事
> 返ってきますが、フォームの戻り値は、「圭\介」となっています。
> カラム名にも使用するとまずい文字がありそうな感じですね。

SJIS で「圭介」は「0x8c, "\", 0x89, 0xee」なので、マルチバイトを意識
しない処理系では、「\」が「圭」の二バイト目ということがわからないため、
特殊文字の「\」を打ち消すために「\\」に置き換えてしまいます。

「圭介」→「0x8c, "\"(0x5c), 0x89, 0xee」
  →「0x8c, "\"(0x5c), "\"(0x5c), 0x89, 0xee」→「圭\介」

PHP は詳しくないですが、多分同じ理由だと思います。

> SQLのWHERE句は、”WHERE 氏名 like '%圭\介%'”となっていました。
> それでも無事圭介がヒットします。
> <良いような悪いような。何か考えられる問題って、ありますか?

MySQL は SJIS 対応しているので、「圭\介」は「"圭"(0x8c5c), "\", "介"(0x89ee)」
と解釈されます。"\" は特殊文字で次の文字が特殊文字の場合その特殊機能を
打ち消すために使用されますが、この場合 "\" の次の「介」は特殊文字ではない
ため、意味が無く無視されます。

ので、結果的には問題ないと思います。
--
民斗 <tommy@xxxxxxxxxx>

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

       598 1999-01-19 03:40 [Masato Toyoshima <to] PHP3 -&gt; MySQL_SJIS ミニレポート      
       599 1999-01-19 04:07 ┣[Masato Toyoshima <to]                                       
       601 1999-01-19 09:57 ┃┗[民斗 <tommy@xxxxxxxx]                                     
       602 1999-01-19 13:09 ┃ ┣[Seiji tateyama <tate]                                   
       604 1999-01-19 21:47 ┃ ┃┗[Masato Toyoshima <to]                                 
       605 1999-01-19 21:47 ┃ ┗[Masato Toyoshima <to]                                   
       607 1999-01-20 12:48 ┃  ┗[民斗 <tommy@xxxxxxxx]                                 
       610 1999-01-20 16:25 ┃   ┗[Masato Toyoshima <to]                               
->     600 1999-01-19 09:41 ┗[民斗 <tommy@xxxxxxxx]