2013-03-07 32 views
-1

我與SQL Server 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 2013-03-07 14:27:14

+0

我有一個表nvarchar(32)列「a」。無論如何,我需要存儲需要更多空間的數據,而且我不允許更改表格。由於這些數據僅用於同情,我決定對其進行散列。當它被散列時,它會變小,但我想知道是否可以面對任何問題,因爲我之前做過這樣的事情。 – gotqn 2013-03-07 14:53:32

+0

我想你可能會對哈希做什麼感到困惑:它不會壓縮數據,也沒有辦法'顛倒'哈希來重新獲得原始值。維基百科有一個[很好的概述](http://en.wikipedia.org/wiki/Hash_function)哈希以及它們的用途。我認爲你需要在這裏重新考慮你的方法,它不完全清楚你在做什麼,但沒有辦法將1024個字符合併到32個字符中。 – Pondlife 2013-03-07 15:43:00

回答

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

這對OP有何幫助?整理來自哪裏?你給出的答案的一些解釋是有益的。 – Kritner 2015-10-08 13:11:06

+0

**問題:** 那麼,是否有一種方法可以爲函數指定排序規則,以便不依賴於數據庫排序規則。 **回答:** SELECT HashBytes('SHA1',CONVERT(nvarchar,'васяпупкин'collat​​e Cyrillic_General_CS_AS)); – mshakurov 2017-12-05 09:17:23