保持nvarchar字段唯一的好方法是什么.我有一个存储mp3文件网址的字段.url长度可以是10个字符到4000之间的任何值.我试图创建一个索引,它说它不能创建索引,因为总长度超过900个字节.
如果该字段未编入索引,则搜索任何内容的速度都会很慢.我正在使用c#,asp.net mvc作为前端.
问候
Paraminder
我需要在我们的Sql Server 2000数据库中散列(MD5)所有密码.我可以轻松地生成一个C#/ VB.NET程序来转换(哈希)所有密码,但我想知道(更多的是我的教育而不是真正迫切需要),如果有可能直接在T-SQL中计算MD5哈希.
感谢任何愿意回答的人.
我有一个SQL表,我在其中存储必须唯一的大字符串值.为了确保唯一性,我在列上有一个唯一索引,我在其中存储大字符串的MD5哈希的字符串表示.
保存这些记录的C#应用程序使用以下方法进行散列:
public static string CreateMd5HashString(byte[] input)
{
var hashBytes = MD5.Create().ComputeHash(input);
return string.Join("", hashBytes.Select(b => b.ToString("X")));
}
Run Code Online (Sandbox Code Playgroud)
为了调用此,我首先转换string到byte[]使用UTF-8编码:
// this is what I use in my app
CreateMd5HashString(Encoding.UTF8.GetBytes("abc"))
// result: 90150983CD24FB0D6963F7D28E17F72
Run Code Online (Sandbox Code Playgroud)
现在我希望能够在SQL中使用该HASHBYTES函数实现这个散列函数,但是我得到了一个不同的值:
print hashbytes('md5', N'abc')
-- result: 0xCE1473CF80C6B3FDA8E3DFC006ADC315
Run Code Online (Sandbox Code Playgroud)
这是因为SQL计算字符串的UTF-16表示的MD5.如果我这样做,我会在C#中获得相同的结果CreateMd5HashString(Encoding.Unicode.GetBytes("abc")).
我无法改变在应用程序中完成散列的方式.
有没有办法让SQL Server计算字符串的UTF-8字节的MD5哈希值?
我查了类似的问题,我尝试使用整理,但到目前为止没有运气.