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'.