私はこのハードコードさを実行すると、私は正しい結果を得る:SQL Serverハッシュ変換の不一致?
Declare @result nvarchar(32)
Set @result = convert(varchar(32), hashbytes('MD5', '1' + 'One' + 'Two' + 'Three'), 2)
select @result
結果: 4173AB4C6EE66BC1FF7B7E5D44A872CA(正しい)
をしかし、私はそれを同じパラメータを与えて、このストアドプロシージャを実行する/呼び出すとき、それはです異なる結果
ALTER Procedure [db_owner].[CheckTheTransaction]
@DataID nvarchar(50),
@Data1 nvarchar(50),
@Data2 nvarchar(50),
@Data3 nvarchar(50)
as
Declare @result nvarchar(32)
Set @result = convert(varchar(32), hashbytes('MD5', @DataID + @Data1 + @Data2 + @Data3), 2)
Select @result
マイ実行:
DECLARE @result int
EXEC @result = [db_owner].[CheckTheTransaction]
@DataID = '1',
@Data1 = 'One',
@Data2 = 'Two',
@Data3 = 'Three'
SELECT 'Result' = @result
GO
結果:私は間違って行くのです 5BD42777932EE959AD5A4C9FEE142F00(間違った)
? varchar型として
「1」はVARCHARで、NVARCHARを渡していると思います。私は両方の値が正しいことを賭けて喜んで - ちょうど第2のものはUTF16です。 –
ハッシュ関数は一般的に悪いようですが、 '@ Data1 = 'XX'、@ Data2 = 'YY''、' @ Data1 =' XXY '、@ Data2 =' Y''は同じハッシュ値を返します。 –