在處理數據庫中的十六進制值時,MySQL UNHEX和X之間的區別究竟是什麼?UNHEX和X之間的區別(MySQL)
例如,
SELECT * FROM test WHERE guidCol IN (UNHEX('hexadecimalstring'));
SELECT * FROM test WHERE guidCol IN (X'hexadecimalstring');
兩者都給出了確切的結果集。那麼有什麼區別?性能影響?
編輯:基礎類型guidCol的是二進制的,當然
在處理數據庫中的十六進制值時,MySQL UNHEX和X之間的區別究竟是什麼?UNHEX和X之間的區別(MySQL)
例如,
SELECT * FROM test WHERE guidCol IN (UNHEX('hexadecimalstring'));
SELECT * FROM test WHERE guidCol IN (X'hexadecimalstring');
兩者都給出了確切的結果集。那麼有什麼區別?性能影響?
編輯:基礎類型guidCol的是二進制的,當然
UNHEX()
是a function,因此,你可以這樣做
SET @var = '41';
SELECT UNHEX(@var);
SELECT UNHEX(hex_column) FROM my_table;
X
,在另一方面,是語法的hexadecimal litteral。你可以這樣做:
SET @var = '41';
SELECT [email protected]; -- 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
不需要評估一個變量,因爲它需要一個字符串。
請注意,即使在MySQL 5.6中,X'表示法在引用mysql客戶端中具有長度限制,UNHEX()也不(看起來)。我不知道X的限制是什麼,因爲它沒有正式記錄,但是在嘗試插入BLOB時遇到了它。使用X''字面值,mysql客戶端用足夠長的十六進制序列拋出語法錯誤,而同一序列的UNHEX()沒有。顯然,長度不是一個問題,當涉及到一個實際的GUID,但我認爲這對於使用這個問題的其他人在一般情況下回答mysql二進制數據插入是非常有用的。
正確答案!謝謝.. – nawfal