SQL 服务器中的 HASHBYTES() 方法得到不同的结果
Getting different results for HASHBYTES() method in SQL Server
我正在尝试将 HASHBYTES 与 MD5 算法结合使用。但是根据数据的传递方式会得到不同的结果,即
如果使用变量传递 SELECT HASHBYTES('MD5', @Var)
显示结果 0xBEC062C01D70F0D2FC15F2E43EE3A66B
如果直接通过 SELECT HASHBYTES('MD5', 'asd123')
显示结果 0xBFD59291E825B5F2BBF1EB76569F8FE7
我使用 INSERT 插入数据,但是当我尝试使用我的存储过程检索时,没有显示任何记录。
有没有我遗漏的东西?
它与字符编码有关。您的 @Var
变量声明为 NVARCHAR
(编码为 UTF-16 Little Endian),但字符串文字为 VARCHAR
(使用与当前数据库关联的 8 位代码页编码默认排序规则),因为它没有以大写字母 N
.
作为前缀
SELECT HASHBYTES('MD5', 'asd123') AS [VARCHAR],
HASHBYTES('MD5', N'asd123') AS [NVARCHAR];
Returns:
VARCHAR NVARCHAR
---------------------------------- ----------------------------------
0xBFD59291E825B5F2BBF1EB76569F8FE7 0xBEC062C01D70F0D2FC15F2E43EE3A66B
有关完整详细的解释,请在此处查看我的回答:
我正在尝试将 HASHBYTES 与 MD5 算法结合使用。但是根据数据的传递方式会得到不同的结果,即
如果使用变量传递
SELECT HASHBYTES('MD5', @Var)
显示结果 0xBEC062C01D70F0D2FC15F2E43EE3A66B如果直接通过
SELECT HASHBYTES('MD5', 'asd123')
显示结果 0xBFD59291E825B5F2BBF1EB76569F8FE7
我使用 INSERT 插入数据,但是当我尝试使用我的存储过程检索时,没有显示任何记录。
有没有我遗漏的东西?
它与字符编码有关。您的 @Var
变量声明为 NVARCHAR
(编码为 UTF-16 Little Endian),但字符串文字为 VARCHAR
(使用与当前数据库关联的 8 位代码页编码默认排序规则),因为它没有以大写字母 N
.
SELECT HASHBYTES('MD5', 'asd123') AS [VARCHAR],
HASHBYTES('MD5', N'asd123') AS [NVARCHAR];
Returns:
VARCHAR NVARCHAR
---------------------------------- ----------------------------------
0xBFD59291E825B5F2BBF1EB76569F8FE7 0xBEC062C01D70F0D2FC15F2E43EE3A66B
有关完整详细的解释,请在此处查看我的回答: