2013-03-07 2 views
-1

나는 SQL 서버 2012 작업을 다음과 같이 정의 필드와 테이블이 오전 :T-SQL HASHBYTES 기능과 정렬

NVARCHAR (32)

하지만이

그 안에 저장해야

NVARCHAR (1024)

가치와 나는 변경할 수 없습니다입니다 열의 길이

이 필드를 채우는 절차가 있습니다. 동시에 그러한 가치가있는 분야가 있다면 그것은 "무언가를 할 것이며, 그러한 가치가있는 분야가 있다면"아무것도하지 않을 것 "입니다.

내가 다음과 같이 HashBytes 기능을 사용하기로 결정했습니다 길이로이 문제를 해결하려면

DECLARE @HashThis nvarchar(1024); 
SELECT @HashThis = CONVERT(nvarchar(1024),'dslfdkjLK85kldhnv$n000#knf'); 
SELECT HASHBYTES('SHA1', @HashThis); 
GO 

나는 당신의 데이터베이스 데이터 정렬에 따라하면 당신은 같은 값에 대해 서로 다른 해시 수익을 가질 수있는 읽었습니다. 그래서, 데이터베이스 정렬에 의존하지 않기 위해 함수에 대해서만 데이터 정렬을 지정하는 방법이 있습니까?

또한 내 아이디어에 문제가 있습니까?

+0

질문이 이해가 가지 않습니다. 더 긴 데이터 유형을 사용할 때의 문제점은 무엇입니까? 해결책이 아닌 문제를 보여주는 코드를 게시 할 수 있습니까? – Pondlife

+0

"a"테이블에 nvarchar (32) 테이블이 있습니다. 어쨌든 더 많은 공간이 필요한 데이터를 저장해야하며 테이블을 변경할 수 없습니다. 이 데이터는 연민을 위해서만 사용되므로 해시를 결정했습니다. 해시 될 때, 그것은 작지만, 전에 내가 이런 짓을했기 때문에 어떤 문제에 직면 할 수 있는지 알고 싶습니다. – gotqn

+0

나는 해쉬가하는 일에 대해 혼란스러워 할 수 있다고 생각한다. 데이터를 압축하지 않기 때문에 원래 값을 다시 얻으려면 해시를 '되돌릴'방법이 없다. 위키 피 디아에는 해시와 그 용도에 대한 [좋은 개요] (http://en.wikipedia.org/wiki/Hash_function)가 있습니다. 여기에 접근 방식을 재고해야한다고 생각합니다. 현재 수행중인 작업이 완전히 명확하지는 않지만 1024자를 32 자로 맞추는 방법은 없습니다. – Pondlife

답변

-1
SELECT HashBytes('SHA1', CONVERT(nvarchar,'вася пупкин' collate Cyrillic_General_CS_AS)) ; 
+0

OP가 어떻게 도움이됩니까? 데이터 정렬은 어디에서 왔습니까? 당신이 준 응답에 대한 몇 가지 설명이 도움이 될 것입니다. – Kritner

+0

** 질문 : ** 데이터베이스 정렬에 의존하지 않기 위해 함수에 대해 데이터 정렬을 지정하는 방법이 있습니까? ** 대답 : ** SELECT HashBytes ('SHA1', CONVERT (nvarchar, 'вася пупкин'는 Cyrillic_General_CS_AS를 콜레이트 함)); – mshakurov