Sql-Server
儲存 HASHBYTES(‘MD5’, …) 結果的最佳數據類型
儲存結果的最佳數據類型是
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)
。vsvarbinary(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,那麼二進制(16)就可以了。如果您想安全地使用它,並允許 HASHBYTES 可以處理的任何可能的算法(目前或未來),請使用 varbinary(8000)。
我絕對不會推薦 char 類型,因為這會涉及字元串轉換成本和不必要的儲存成本。