Answers:
CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2)
没有其他答案对我有用。请注意,如果您传递一个硬编码的字符串而不是从结果集中的一列中输入,则SQL Server将给出不同的结果。下面是使我在SQL Server和MySql之间实现完美匹配的神奇方法
select LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(varchar, EmailAddress)), 2)) from ...
LOWER()
仅在区分大小写时才需要使用。
MD5
与的MD5()
功能相比,这给出了相同的哈希值Postgresql
。我不知道为什么MD5
哈希与Python
和不同Postgresql
。谢谢你的食谱...
declare @hash nvarchar(50)
--declare @hash varchar(50)
set @hash = '1111111-2;20190110143334;001' -- result a5cd84bfc56e245bbf81210f05b7f65f
declare @value varbinary(max);
set @value = convert(varbinary(max),@hash);
select
SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', '1111111-2;20190110143334;001')),3,32) as 'OK'
,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', @hash)),3,32) as 'ERROR_01'
,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',convert(varbinary(max),@hash))),3,32) as 'ERROR_02'
,SUBSTRING(sys.fn_sqlvarbasetostr(sys.fn_repl_hash_binary(convert(varbinary(max),@hash))),3,32)
,SUBSTRING(sys.fn_sqlvarbasetostr(master.sys.fn_repl_hash_binary(@value)),3,32)