2

有人可以告诉我为什么我得到以下不同的答案:

这是一个非常简单的函数,用于返回哈希值:

CREATE Function [fn_GetPin](@strText VARCHAR(254))
RETURNS VARCHAR(254)
AS
BEGIN
    SET @strText = HashBytes('MD5', @strText);
    RETURN @strText;
END

这是我的 SQL,它返回 2 个不同的值:

SELECT HashBytes('MD5', '7690') as Hash1
        , dbo.fn_GetPin('7690') AS Hash2

结果:

Hash1   Hash2
0xC6776F93BC9AFE2E511A1DBD5478362C  Æwo“¼šþ.Q½Tx6,

由于某种原因,该函数没有返回与 HASH1 相同的值。我只是不确定为什么。

谢谢。

更新:

接受的答案如下,我只是将 (max) 添加到 VARBINARY 以返回整个值。谢谢大家。

CREATE Function [fn_GetPin](@strText VARCHAR(254))
RETURNS VARBINARY(max)
AS
BEGIN
    Return HashBytes('MD5', @strText);
END
4

2 回答 2

2
CREATE Function [fn_GetPin](@strText VARCHAR(254))
RETURNS VARBINARY
AS
BEGIN
    Return HashBytes('MD5', @strText);
END

函数应该返回一个varbinary值。

于 2015-12-22T17:04:35.667 回答
1

pvg 几乎把它钉在了上面。

CREATE Function [fn_GetPin](@strText VARCHAR(254))
RETURNS VARBINARY
AS
BEGIN
    SET @strText = HashBytes('MD5', @strText);
    RETURN CAST(@strText as VARBINARY);
END
于 2015-12-22T17:01:53.390 回答