在SQL Server中更新sha2 256的查询

时间:2016-01-09 08:33:57

标签: php mysql sql-server

我正在从mysql迁移到ms sql server, 当我使用mysql时,我正在使用此查询。

UPDATE users SET user_password = sha2('test', 256);

我正在尝试在mysql服务器上使用此查询,它返回成功查询。

UPDATE users SET user_password = HASHBYTES('SHA2_256', 'test');

但是当我尝试使用此密码登录时,它会一直返回错误的密码。

请指出我的错误在哪里以及如何解决。

提前致谢。

2 个答案:

答案 0 :(得分:2)

这个问题实际上是我们在不久前发现的一个有趣的问题。 SQL Management Studio使用UTF-16作为用户的字符编码。如果您将字符串直接传递给var foo = new Boolean(param); // equivalent to `var foo = Object(Boolean(param));` console.log(foo === true) // true, because object - true foo.prop1 = 'test'; ," test"似乎被解释为HASHBYTES。如果传递变量,则正确解释参数:

"t\0e\0s\0t\0"

结果

DECLARE @tst as NVARCHAR(MAX);
SET @tst = 'test';

SELECT @tst, HASHBYTES('SHA2_256', 'test') as "UTF16", 
       HASHBYTES('SHA2_256', @tst) as "UTF8"

答案 1 :(得分:1)

我在google上发现一些链接时显然解决了这个问题,这里是脚本。

UPDATE users SET usr_password = lower(CONVERT(varchar(max), HASHBYTES('SHA2_256', 'test'), 2));

很抱歉给您带来不便,感谢任何帮助过的人。