UNHEX和X之间的区别(MySQL)

naw*_*fal 10 mysql hex guid

在处理数据库中的十六进制值时,MySQL UNHEX和X之间的区别是什么?

例如.

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

SELECT * FROM test WHERE guidCol IN (X'hexadecimalstring');
Run Code Online (Sandbox Code Playgroud)

两者都给了我精确的结果集.那有什么区别吗?性能影响?

编辑: guidCol的基础类型当然是二进制的

Ran*_*eed 15

UNHEX()一个功能,因此你可以做类似的事情

SET @var = '41';
SELECT UNHEX(@var);
SELECT UNHEX(hex_column) FROM my_table;
Run Code Online (Sandbox Code Playgroud)

X另一方面,是十六进制文本的语法.你不能做这个:

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
Run Code Online (Sandbox Code Playgroud)

这就解释了为什么你总能获得更好的性能X:你使用的是语言结构而不是函数调用.X不需要评估变量,因为它需要一个litteral字符串.