11

データベースで16進値を処理する場合、MySQL UNHEXとXの実際の違いは何ですか?

例えば。

SELECT * FROM test WHERE guidCol IN (UNHEX('hexadecimalstring'));

SELECT * FROM test WHERE guidCol IN (X'hexadecimalstring');

どちらも正確な結果セットを提供します。それで違いはありますか?パフォーマンスへの影響?

編集:基本的なタイプのguidColはもちろんバイナリです

4

2 に答える 2

16

UNHEX()関数なので、次のようなことができます

SET @var = '41';
SELECT UNHEX(@var);
SELECT UNHEX(hex_column) FROM my_table;

X一方、 は16 進数リテラルの構文です。これを行うことはできません:

SET @var = '41';
SELECT X@var; -- error (string litteral expected)
SELECT X'@var'; -- error (`@` is not a hexadecimal digit)
SELECT X(@var); -- returns NULL, not too sure about the reason... [edit: but this is probably why you are inserting NULL values]
SELECT X(hex_column) FROM my_table; -- returns NULL as well

Xこれは、関数呼び出しの代わりに言語構造を使用しているため、 を使用すると常にパフォーマンスが向上する理由を説明しています。Xリテラル文字列を想定しているため、変数を評価する必要はありません。

于 2012-06-24T10:13:34.437 に答える