Ani*_*tta 5 database sql-server hash character-encoding
我正在尝试将 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];
Run Code Online (Sandbox Code Playgroud)
返回:
VARCHAR NVARCHAR
---------------------------------- ----------------------------------
0xBFD59291E825B5F2BBF1EB76569F8FE7 0xBEC062C01D70F0D2FC15F2E43EE3A66B
Run Code Online (Sandbox Code Playgroud)
有关完整详细的解释,请参阅我的回答:
| 归档时间: |
|
| 查看次数: |
1343 次 |
| 最近记录: |