This question already has answers here:
Using HashBytes in SQL Server returns different results from DB

(3个答案)


已关闭6年。




我正在尝试将HASHBYTES与MD5算法一起使用。但是会根据数据的传递方式获得不同的结果,即
  • (如果使用变量SELECT HASHBYTES('MD5', @Var)传递)显示结果0xBEC062C01D70F0D2FC15F2E43EE3A66B
  • (如果传递的话)SELECT HASHBYTES('MD5', 'asd123')显示结果0xBFD59291E825B5F2BBF1EB76569F8FE7

  • 我使用INSERT插入了数据,但是当我尝试使用STORED PROCEDURE进行检索时,未显示任何记录。

    有什么我想念的吗?

    最佳答案

    它与字符编码有关。您的@Var变量声明为NVARCHAR(编码为UTF-16 Little Endian),但是字符串文字是VARCHAR(使用与当前数据库的默认归类相关联的8位代码页进行编码),因为它没有大写前缀N

    SELECT HASHBYTES('MD5', 'asd123') AS [VARCHAR],
           HASHBYTES('MD5', N'asd123') AS [NVARCHAR];
    
    返回值:
    VARCHAR                             NVARCHAR
    ----------------------------------  ----------------------------------
    0xBFD59291E825B5F2BBF1EB76569F8FE7  0xBEC062C01D70F0D2FC15F2E43EE3A66B
    
    有关详细说明,请在此处查看我的答案:
    TSQL md5 hash different to C# .NET md5

    关于sql-server - 在SQL Server中获得HASHBYTES()方法的不同结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28438563/

    10-10 13:27