在处理数据库中的十六进制值时,MySQL UNHEX 和 X 之间到底有什么区别?
Eg.
SELECT * FROM test WHERE guidCol IN (UNHEX('hexadecimalstring'));
SELECT * FROM test WHERE guidCol IN (X'hexadecimalstring');
两者都给了我准确的结果集。那么有什么区别吗?性能影响?
Edit:guidCol 的底层类型当然是二进制的
UNHEX()
is 一个函数 http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_unhex,因此你可以做类似的事情
SET @var = '41';
SELECT UNHEX(@var);
SELECT UNHEX(hex_column) FROM my_table;
X
另一方面,是 a 的语法十六进制文字 http://dev.mysql.com/doc/refman/5.5/en/hexadecimal-literals.html。你不可以做这个:
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
不需要计算变量,因为它需要一个文字字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)