sql-server - 在 SQL Server 中获取 HASHBYTES() 方法的不同结果

标签 sql-server database hash character-encoding

<分区>

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

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

  2. 如果直接通过 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];

返回:

VARCHAR                             NVARCHAR
----------------------------------  ----------------------------------
0xBFD59291E825B5F2BBF1EB76569F8FE7  0xBEC062C01D70F0D2FC15F2E43EE3A66B

有关详细说明,请在此处查看我的回答:

TSQL md5 hash different to C# .NET md5

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

相关文章:

python - 模块中的自定义引擎创建 SQLAlchemy

php - 在 SQL 查询中连接 3 个或更多表,返回空数组?

memory - Redis 最佳哈希集条目大小

python - 验证文件未被修改

sql - 在 SQL Server 中查询非常规人名

sql - 忽略 bcp 右截断

sql - SQL Server 中的完全递归员工-老板关系

sql-server - 选择多个节点 xml

mysql - 触发器中使用 If_Else 时出错

php - 我可以在 php 中使用 glftpd 的哈希算法吗?