Sql-Server

儲存 HASHBYTES(‘MD5’, …) 結果的最佳數據類型

  • November 29, 2017

儲存結果的最佳數據類型是HASHBYTES('MD5', ...)什麼?

它輸出 16 字節的二進制如下:例如

0x5CFCD77F9FF836189D2F647EBCEA183E

我可以將其儲存在以下數據類型中:

每一行都有一個值(沒有空值),並且該列將用於與另一個表中的類似列進行比較。

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,那麼二進制(16)就可以了。如果您想安全地使用它,並允許 HASHBYTES 可以處理的任何可能的算法(目前或未來),請使用 varbinary(8000)。

我絕對不會推薦 char 類型,因為這會涉及字元串轉換成本和不必要的儲存成本。

引用自:https://dba.stackexchange.com/questions/191979