2011.09.20
 

SQLで16進数値を使用する

Question

PHP を使用してファイル上に SQL 要求を作成しようとしているときに問題が起きました。ファイルにはキーとなるフィールドがあり、16 バイトの 16 進数値を含む英数字フィールドとして定義されています。

PHP のデータを読み取るため、HEX 関数を使用してデータを文字表現せざるを得なくなりました。

$query = "SELECT IFSAUDF.*, HEX(KEY) as K FROM IFSAUDF WHERE SYS = 'SRC'";

次を使ってファイルへのリンクのキーを形成します。

   echo("");

その結果次のような要求 URL が生成されます。

http://www2.ha4i.local
/dspifsdets.php?key=000000000000000192609AA7000000...

次にそのデータを使い同じキーを持つレコードを検索しようとします。

SELECT * FROM IFSAUDF where KEY='000000000000000192609AA700000021'

ところが、要求は正しくフォーマットされているにもかかわらず結果が得られませんでした。SQL がキーを 16 バイトの 16 進数ではなく 32 文字の英数字として解釈しているためです。SQL 要求に、文字列表現ではなく 16 進数値としてキー値を強制的に参照させるにはどうしたらよいでしょうか。

Answer

SQL には、正にこのような状況のためにキー指定 HEX(Key) があります。例にある 16 進数値で、次の where 節を使用して SELECT ステートメントをコーディングします。

where HEX(Key) = '000000000000000192609AA700000021'.

ページトップ

ボタン