存储结果的最佳数据类型是HASHBYTES('MD5', ...)
什么?
它输出 16 字节的二进制如下:例如
0x5CFCD77F9FF836189D2F647EBCEA183E
我可以将其存储在以下数据类型中:
char(34)
binary(16)
(我认为 - 我在这里读到(https://stackoverflow.com/questions/14722305/what-kind-of-datatype-should-one-use-to-store-hashes#16680423)使用相同的算法应该返回无论输入字符串如何,每次都使用相同的字节数)- 其他?
每一行都有一个值(没有空值),并且该列将用于与另一个表中的类似列进行比较。
HASHBYTES
如上所述 ,存储输出以供使用的最佳数据类型是哪种?
我在想,由于固定长度的数据类型有时在连接等方面效率更高binary(16)
。vs varbinary(8000)
(的默认输出HASHBYTES
)似乎最好,binary(16)
vs avarchar(34)
更好,因为它会使用更少的存储空间。
根据在线图书:
因此,尽管该函数在技术上返回 varbinary(8000),但使用 MD5 只能得到 16 个字节。如果您完全确定只需要 MD5,那么二进制(16)就可以了。如果您想安全地使用它,并允许 HASHBYTES 可以处理的任何可能的算法(当前或未来),请使用 varbinary(8000)。
我绝对不会推荐 char 类型,因为这会涉及字符串转换开销和不必要的存储开销。