When executing that query:
SELECT HashBytes('MD5', CONCAT('A',convert(nvarchar,100),'1234')) as mycol ...
I get HashBytes represented such as
0xA6A0D....
When I do not convert, the HashBytes look like the following:
SELECT HashBytes('MD5', CONCAT('A','100','1234')) as mycol
0x88230...
Why is it different?
CodePudding user response:
As mentioned by Larnu in the comments, data types matter. To see why you're getting different hashes lets take a look at what CONCAT outputs for the two cases:
SELECT CAST(CONCAT('AVS',convert(nvarchar,313),'@310001') AS VARBINARY(MAX));
| 0x4100560053003300310033004000330031003000300030003100 |
SELECT CAST(CONCAT('AVS','313','@310001') AS VARBINARY(MAX));
| 0x41565333313340333130303031 |
Because one of the parameters to CONCAT is of type nvarchar the others are coerced to nvarchar as well to return an nvarchar result.
Read through the Remarks section of the CONCAT (Transact-SQL) documentation for a complete accounting of the expected output types for given input types.
