根据固定字符串和列值的组合选择MD5哈希

时间:2015-02-25 17:08:18

标签: sql sql-server

出于示例的目的,我有一个包含单列的表:

Col1 NVARCHAR(50)

它有一行,Col1的值为:b

我想创建一个使用该值创建MD5哈希值的select语句,但该值需要以下列格式附加到几个固定字符串中:

'a' + Col1 + 'c'

如此有效,我正在尝试为'abc'创建一个MD5,这应该导致:

  

900150983CD24FB0D6963F7D28E17F72

要创建MD5哈希,我使用的是HashBytes函数。但是,当我使用列值加入固定字符串时,它不会产生预期的输出。例如:

CONVERT(VARCHAR(32), HashBytes('MD5', 'a' + Col1 + 'c'), 2)

结果:

  

CE1473CF80C6B3FDA8E3DFC006ADC315

哪个错了。但是,以下所有结果都会产生正确的输出:

CONVERT(VARCHAR(32), HashBytes('MD5', 'abc'), 2)
CONVERT(VARCHAR(32), HashBytes('MD5', 'a' + 'b' + 'c')

显然这与使用字段值有关,但是我很遗憾它是什么(可能是某些编码或与nvarchar有什么关系?)。

如何确保生成正确的MD5值?

1 个答案:

答案 0 :(得分:1)

该列为NVARCHAR,但其他值均为VARCHAR

您可以将列强制为VARCHAR

CONVERT(VARCHAR(32), HashBytes('MD5', 'a' + CAST(Col1 AS VARCHAR(50)) + 'c'), 2)