为什么字符串散列在C#和SQL Server中会产生不同的结果?

为什么字符串散列在C#和SQL Server中会产生不同的结果?,c#,asp.net,sql-server,hash,md5,C#,Asp.net,Sql Server,Hash,Md5,我的C#代码中有这个函数: 公共静态字符串计算哈希(字符串输入) { string hash=string.Empty; 使用(System.Security.Cryptography.MD5 md5Hash=System.Security.Cryptography.MD5.Create()) 尝试 { //将输入字符串转换为字节数组并计算哈希。 byte[]data=md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input)); StringBuilde

我的C#代码中有这个函数:

公共静态字符串计算哈希(字符串输入)
{
string hash=string.Empty;
使用(System.Security.Cryptography.MD5 md5Hash=System.Security.Cryptography.MD5.Create())
尝试
{
//将输入字符串转换为字节数组并计算哈希。
byte[]data=md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
StringBuilder sb=新的StringBuilder();
//循环遍历散列数据的每个字节,并将每个字节格式化为十六进制字符串。
for(int i=0;i
以下是我在SQL Server中存储价值的方式:

lower(转换(NVARCHAR(32),HashBytes('MD5',@partIdentifier),2))

这两个值的结果完全不同。有人知道为什么吗?或者我如何解决它呢?

如果
@partIdentifier
nvarchar
,那么它就是utf-16。如果它是
varchar
,那么它就是数据库中选择的任何代码页。这两种情况都不是utf-8。非常感谢,这似乎就是问题所在