我在数据库中有一个列,其中包含列的'/'数据类型为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
之前有没有人遇到过这个问题?如果是这样,你有解决方案或只是解释发生了什么?我有一个解决方法,所以在这一点上,它更多的是出于好奇的缘故,我正在问。