跳到内容
必威体育论坛必威精装下载APPRedfin解决方案的标志必威体育论坛必威精装下载APPRedfin解决方案的标志 联系
windows键盘

在SQL Server 2005中使用HASHBYTES()复制MySQL的MD5()函数

MySQL和PostgreSQL的MD5()函数是很好的、简单的方法来散列你的数据。不幸的是,SQL Server 2005和以上(抱歉,为了让它在SQL Server 2000工作,你需要尝试一个存储过程),你可以使用HASHBYTES ()函数。

在最近的Drupal 5的Actions模块的SQL Server端口,我遇到了以下MySQL查询:

SELECT aid FROM {actions} WHERE MD5(aid) = '%s'

为了让它在SQL Server 2005中工作,我们必须首先使用HASHBYTES()函数来代替:

SELECT aid FROM {actions} WHERE HASHBYTES('MD5',aid) = '%s'

这在技术上完成了这个技巧,但是,问题是SQL Server在结果散列上加了“0x”。我认为这是因为它想要指定结果的基数(在本例中是十六进制)。在我的例子中,我需要将这个结果与没有0x前缀的散列进行比较。为此,我们需要使用SUBSTRING()删除前缀。由于不能直接操作二进制数据,所以我使用了一个“无文档记录的”SQL Server函数sys.fn_sqlvarbasetostr()将散列转换为字符串。

SELECT aid FROM {actions} WHERE SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',$1)),3,32) = '%s'

SUBSTRING函数中的32指的是MD5哈希值中的32个字符。

Baidu