奇怪的char和md5的问题

时间:2014-01-17 09:59:01

标签: sql sql-server md5

我在数据库中有一个列,其中包含列的'/'数据类型为nvarchar(4000)。我遇到的问题是,当我对列进行hashbytes('MD5',page)时结果与hashbytes('MD5','/')不同。经过一些挖掘后,我发现在将色谱柱转换为varchar(4000)之后,该列实际上包含'/?'所以那里有一些奇怪的字母,这导致我的md5不同地计算。

select id,
       profileid,
       cast( page as varchar(4000)) as pageVarchar,
       hashbytes('MD5',cast( page as varchar(4000)) ) as pageVarcharMd5,       
           cast( page as nvarchar(4000)) as pageNvarchar,
       hashbytes('MD5',cast( page as nvarchar(4000)) ) as pagenVarcharMd5,     
       hashbytes('MD5',cast('/' as varchar(4000))) as md5slashVarchar,
       hashbytes('MD5',cast('/' as nvarchar(4000))) as md5slashnvarchar
from dpage
where (page = '/')

正如你所看到的那样,我可以在page ='/'中找到我的行。但是当我开始尝试哈希时,结果就不同了。

id  profileid   pageVarchar pageVarcharMd5                      pageNvarchar    pagenVarcharMd5                    md5slashVarchar                     md5slashnvarchar
40  34896748    /?          0xE01DD917A616858C7BA62C0F85F63110  /‎               0x35F46F45AB74285BB888711367F0A86E 0x6666CD76F96956469E7BE39D750CC7D9  0x6B92BB2C65A19276DF9388E936CCD25C

之前有没有人遇到过这个问题?如果是这样,你有解决方案或只是解释发生了什么?我有一个解决方法,所以在这一点上,它更多的是出于好奇的缘故,我正在问。

0 个答案:

没有答案