在处理数据库中的十六进制值时,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字符串.