MySQL hex() 与 unhex()

Ebo*_*bob 4 mysql

在 MySQL 中存储二进制数据时,我使用hex()unhex()函数。但我可以通过两种方式搜索二进制数据:

方法一

select * from tbl
where
    id=unhex('ABCDABCDABCDABCDABCDABCDABCDABCD')
Run Code Online (Sandbox Code Playgroud)

方法2

select * from tbl
where
    hex(id)='ABCDABCDABCDABCDABCDABCDABCDABCD'
Run Code Online (Sandbox Code Playgroud)

两种方法都有效,但我的直觉是方法 1 更好,因为函数仅处理输入值unhex,而在方法 2 中,表列中的每个值id都将通过函数处理hex

这个推理是否正确,或者 MySQL 会优化查询来防止这种情况发生吗?选择一种方法而不是另一种方法还有其他原因吗?

Sam*_*nen 5

当您在列上使用任何函数时,使用索引变得困难或不可能。我不确定MySQL是否支持带函数的索引,但它仍然比仅使用列更复杂。

另外,正如您所说,该函数必须为每一行运行一次,而在另一行中只需为输入数据运行一次。

由于这些原因,请务必使用带有 unhex 的形式。