存储 HASHBYTES('MD5', ...) 结果的最佳数据类型

GWR*_*GWR 8 sql-server datatypes sql-server-2014 hashing

存储结果的最佳数据类型是HASHBYTES('MD5', ...)什么?

它输出 16 字节的二进制如下:例如

0x5CFCD77F9FF836189D2F647EBCEA183E
Run Code Online (Sandbox Code Playgroud)

我可以将它存储在以下数据类型中:

  • char(34)
  • binary(16)(我认为 - 我在这里读到(/sf/ask/1030561381/#16680423)使用相同的算法应该返回无论输入字符串如何,每次都具有相同数量的字节)
  • 其他?

每行都有一个值(没有空值),并且该列将用于与另一个表中的类似列进行比较。

哪种数据类型用于存储HASHBYTES上述使用的输出的最佳数据类型?

我在想,因为固定长度的数据类型有时在连接等方面可能更有效。binary(16)vs varbinary(8000)(的默认输出HASHBYTES)似乎最好,而binary(16)vs avarchar(34)更好,因为它会使用更少的存储空间。

db2*_*db2 8

根据在线书籍

输出符合算法标准:MD2、MD4、MD5为128位(16字节);SHA 和 SHA1 为 160 位(20 字节);SHA2_256 为 256 位(32 字节),SHA2_512 为 512 位(64 字节)。

因此,尽管该函数在技术上返回 varbinary(8000),但使用 MD5 只能获得 16 个字节。如果您完全确定您只需要 MD5,那么 binary(16) 就可以做到。如果您想安全运行,并允许 HASHBYTES 可以处理的任何可能的算法(当前或未来),请使用 varbinary(8000)。

我绝对不会推荐 char 类型,因为这会涉及字符串转换开销和不必要的存储开销。