2011-10-18 2 views
2

데이터베이스의 md5 해시 열에 인덱스를 넣어야합니다. md5 열에 대한 검색을 수행 할 것입니다. CHAR (32)로 해시를 저장하려고했지만 이진 열 옵션도 보았습니다. md5 해시를 저장하면 이진 열 또는 char (32)에서 더 잘 작동합니까? Linq to Entities를 사용하여 이진 열을 쿼리 할 수 ​​있습니까? 그렇다면 어떻게해야합니까?Linq : 데이터베이스에 MD5 해시 열을 저장하는 방법

+0

기술적으로, 바이트 배열을 헥사하는 대신, Base64 it ('Convert.ToBase64String (bytes)')과 24 바이트 문자열을 얻을 수 있습니다. – xanatos

답변

5

SQL Server 나 128 비트 GUID 유형을 지원하는 다른 서버를 사용하는 경우 GUID 유형을 사용하여 MD5 값을 나타낼 수 있습니다.

MD5는 16 바이트 (128 비트)이므로 쉽게 GUID로 변환 할 수 있습니다. C#에서 그렇게하기 위해 Guid 구조체를 사용하거나 손으로 간단한 변환 루틴을 작성할 수 있습니다.

guids의 형식은 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx입니다. 여기서 x는 16 진수 문자이지만 128 비트 정수로 내부적으로 저장되므로 공간이 거의 차지하지 않으며 매우 빠릅니다. 쿼리!

GUIDS는 char 또는 binary보다 훨씬 잘 작동하며 고정 된 크기이며 매우 빠른 속도와 낮은 공간 사용으로 더 많은 비트가 필요할 때 INT 대신 키 \ 인덱스로 사용됩니다.

+0

질문에 sql-server-2008 태그가 지정되어 있으므로 예. :) – bzlm

+0

롤 예 :) 나는 더 일반적인 대답을하려고 애썼다 : 추상화는 항상 좋은 것 : D –

+0

와우 .. 이건 아주 좋은 생각이다. 나는 이것을 구현할 것이다. – Luke101

0

색인 생성이 동일한 경우 선택한 유형에 상관없이 저장 용량에 차이가 있습니다. 이진 타입은 아마도 작을 것이고, char 타입은 값을 정수로 인코딩 할 것입니다. 정말로 그 날이 끝날 때면 나는 이진을 더 용서 할 것이기 때문에 char를 사용할 것입니다. 따라서 이들 중 수백만 개를 저장하지 않으면 큰 차이를 내지 않을 것입니다.

LINQ에 관해서는 확실하지 않지만 실제로 할 수있을 것이라고 확신합니다. 필드 대신 필드가 될 것입니다. 그건 내가 숯불 가고, 린크 쉽게 다루는 다른 이유입니다.

+0

"필드 대신"? – bzlm

+0

아, 내 답안지의 일부를 벗겨 냈어. 아직도 오버플로가 겹쳐서. 거기에 있어야 할 것은 템플릿 클래스 에서처럼 신호보다 작습니다. 데이터 집합에 대해 linq의 필드를 참조 할 때 데이터가 나온 열의 유형을 지정합니다. 그것은 바이너리가 아닌 char 일 것입니다. –

+0

'()'대신'()'과 같은 뜻입니까? 그게 여기에 관련이 있는지 모르겠습니다. 그것은 EF (L2E), 이전 ADO 2.0 Linq - DataSet 물건이 아니에요. :) – bzlm

0

정말 코드에서 해시를 나타내는 방법에 따라 다릅니다. 바이트 배열이면 이진 DB 유형을 사용하십시오. 문자열 인 경우이를 사용하십시오. 어느 쪽이든, 어떤 레벨의 모든 바이너리 데이터입니다. 컴퓨터에 데이터를 표시 할 때 해석하는 방법입니다.