Linq:如何在数据库中存储MD5哈希列

时间:2011-10-18 17:56:55

标签: c# sql-server-2008 c#-4.0 linq-to-entities

我需要在数据库中的md5哈希列上放置一个索引。我将在md5列上执行搜索。我打算将哈希存储为CHAR(32),但我也看到了二进制列选项。存储md5哈希会更好地在二进制列或char(32)中工作。我可以使用Linq to Entities来查询二进制列吗?如果是这样,我将如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

如果您使用的是SQLServer或任何其他支持128位GUID类型的服务器......您可以使用GUID类型来表示MD5值。

由于MD5是16字节(128位),您可以轻松地将其转换为GUID。 为了在C#中执行此操作,您可以使用Guid结构和\或手动编写简单的转换例程。

Guids的格式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中x是十六进制字符,但内部存储为128位整数,因此,它们占用的空间非常少,查询速度非常快!

GUIDS比char或二进制文件更好,它们是固定大小的,并且由于速度非常快,占用空间小而需要更多位时,通常用作键\索引而不是INT。

答案 1 :(得分:0)

如果索引相同,则选择哪种类型无关紧要,差异将在存储中。二进制类型可能更小,而char类型将值编码为整数。真的在一天结束时我会使用char,因为它比二进制文件更宽容。因此,除非你存储了大量的这些数百万,否则它们不会产生很大的不同。

至于LINQ,我不确定,但我很确定你可以,它只是场而不是场。这是我去char的另一个原因,它使得更容易处理linq。

答案 2 :(得分:0)

这实际上取决于您在代码中表示哈希的方式。如果是字节数组,请继续使用二进制数据库类型。如果它是一个字符串,请使用它。无论哪种方式,它都是某种程度上的二进制数据,它只是告诉计算机在向您显示数据时如何解释它。