【问题标题】:Getting different results for HASHBYTES() method in SQL Server [duplicate]在 SQL Server 中获取 HASHBYTES() 方法的不同结果 [重复]
【发布时间】:2015-04-10 21:24:39
【问题描述】:

我正在尝试将 HASHBYTES 与 MD5 算法一起使用。但是会根据数据的传递方式得到不同的结果,即,

  1. 如果使用变量 SELECT HASHBYTES('MD5', @Var) 传递,则显示结果 0xBEC062C01D70F0D2FC15F2E43EE3A66B

  2. 如果直接通过 SELECT HASHBYTES('MD5', 'asd123') 显示结果 0xBFD59291E825B5F2BBF1EB76569F8FE7

我使用 INSERT 插入了数据,但是当我尝试使用我的 STORED PROCEDURE 检索时,没有显示任何记录。

我有什么遗漏吗?

【问题讨论】:

    标签: sql-server database hash character-encoding


    【解决方案1】:

    这与字符编码有关。您的 @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

    【讨论】:

    • 谢谢!!!这真的解决了我的问题......
    猜你喜欢
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多