我正在从mysql迁移到ms sql server, 当我使用mysql时,我正在使用此查询。
UPDATE users SET user_password = sha2('test', 256);
我正在尝试在mysql服务器上使用此查询,它返回成功查询。
UPDATE users SET user_password = HASHBYTES('SHA2_256', 'test');
但是当我尝试使用此密码登录时,它会一直返回错误的密码。
请指出我的错误在哪里以及如何解决。
提前致谢。
答案 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));
很抱歉给您带来不便,感谢任何帮助过的人。