使用T-SQL生成MD5哈希string

有没有办法生成MD5types的varchar(32)哈希string,而不使用fn_varbintohexstr

SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'email@dot.com')), 3, 32) 

所以它可以在SCHEMABINDING的视图中使用

 CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2) 

使用HashBytes

 SELECT HashBytes('MD5', 'email@dot.com') 

那会给你0xF53BD08920E5D25809DF2563EF9C52B6

 SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'email@dot.com'),2) 

那会给你F53BD08920E5D25809DF2563EF9C52B6

解:

 SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5','your text')),3,32) 

没有其他答案为我工作。 请注意,如果传递硬编码string,而不是从结果集的列中提供,则SQL Server将提供不同的结果。 下面是为我提供SQL Server和MySql之间完美匹配的魔法

 select LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(varchar, EmailAddress)), 2)) from ... 

对于最多8000个字符的数据使用:

 CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2) 

对于二进制数据(没有8000字节的限制)使用:

 CONVERT(VARCHAR(32), master.sys.fn_repl_hash_binary(@IMG_PATH), 2) 

尝试这个:

 select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', 'email@dot.com' )),3,32) 

来源: http : //linesofcode.net/snippets/161