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)
更好,因为它会使用更少的存储空间。
根据在线书籍:
输出符合算法标准: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 类型,因为这会涉及字符串转换开销和不必要的存储开销。