我在SELECT语句中使用的代码如下:
CAST(HASHBYTES(N'SHA1', Bla) AS NVARCHAR(MAX)) AS hashed_bla
,最后在ssms网格中以及上游应用程序中都使用“中文” / UTF编码的字符。有办法改变吗?这和整理有关吗?谢谢!
答案 0 :(得分:2)
您所拥有的正在按预期工作。请看以下示例:
SELECT HASHBYTES('SHA1','B8187F0D-5DBA-4D43-95FC-CD5A009DB98C');
这将返回varbinary
值0xA04B9CB18A2DC4BC08B83FCCE48A0AF1A1390756
。然后,您将该值转换为nvarchar
,因此得到N'䮠놜ⶊ별레찿諤㦡嘇'
之类的结果(在我的整理中)。对于varbinary
,每个4个字符代表一个字符。因此,对于上面的A04B
是第一个字符(即N'䮠'
)。
出现的后面是一个表示varchar
值的varbinary
(这里不需要nvarchar
,因为不会有Unicode字符)。为此,您需要使用CONVERT
和样式代码。对于我上面给出的示例,将是:
SELECT CONVERT(varchar(100),HASHBYTES('SHA1','B8187F0D-5DBA-4D43-95FC-CD5A009DB98C'),1);
哪个返回varchar
值'0xA04B9CB18A2DC4BC08B83FCCE48A0AF1A1390756'
。如果您一开始不希望使用'0x'
,请使用样式代码2
,而不要使用1
。