现需要直接使用SQL Server 2008的函数生成某个字符串的MD5值。2005以上的版本,使用HASHBYTES这个函数,用法如下:
select HASHBYTES('MD5','this is a very long text');
但是,得到的结果和PHP函数的md5值有所不同——前面多了一个“0x“,需要去除。
select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5','this is a very long text')),3,32)
fn_sqlvarbasetostr是SQL SERVER系统的一个函数,之所以使用它是因为通过HASHBYTES得到的别不是一个字符串型的值,而是一个十六进制的。那么直接使用SUBSTRING会变成另外的字符串。所以必须先将HASHBYTES得到的值转换成纯文本型 ,再使用SUBSTRING截取。
其实你直接吧32位的MD5取中间16位(第9个字符到第24个字符之间)就成16位MD5了(好像用数据库自带的SQL语句就能完成)。。
所以只需要把32位的转成16位,然后和16位的那个网站的用户数据合并起来就可以了。。
原文参考:http://redfinsolutions.com/blog/replicate-mysqls-md5-function-sql-server-2005-using-hashbytes