我使用带有文字表达式的HashBytes和字段的值在SQLSERVER中获得不同的结果

时间:2014-04-10 11:59:45

标签: sql sql-server sql-server-2012

我正在尝试更新SQL SERVER数据库的密码。

表用户(登录名,密码)

代码:

SELECT    
[login],
sys.fn_varbintohexsubstring(0, HashBytes('SHA1', [login]),1,0),
sys.fn_varbintohexsubstring(0, HashBytes('SHA1', 'usuario'),1,0)
FROM users
WHERE [login] = 'usuario';

结果是:

b63b34d5873bad93c92ec90c74ae0a4232e6473b
b665e217b51994789b02b1838e730d6b93baa30f

请注意" [登录]"包含' usuario'作为价值。

帮助

1 个答案:

答案 0 :(得分:4)

您的login列是nvarchar列,因此所涉及的实际字节数不同。

请参阅:

SELECT    
sys.fn_varbintohexsubstring(0, HashBytes('SHA1', N'usuario'),1,0),
sys.fn_varbintohexsubstring(0, HashBytes('SHA1', 'usuario'),1,0)

结果:

b63b34d5873bad93c92ec90c74ae0a4232e6473b
b665e217b51994789b02b1838e730d6b93baa30f

请参阅Constants

  

Unicode字符串的格式类似于字符串,但前面有一个N标识符(N代表SQL-92标准中的国家语言)。 N前缀必须为大写。例如,'Michél'是字符常量,而N'Michél'是Unicode常量