![](/img/trans.png)
[英]Convert utf-8 encoded varbinary(max) data to nvarchar(max) string
[英]cast to NVARCHAR(MAX) causes "chinese"/UTF encoded characters
我在 SELECT 語句中使用這樣的代碼:
CAST(HASHBYTES(N'SHA1', Bla) AS NVARCHAR(MAX)) AS hashed_bla
並在 ssms 網格以及上游應用程序中以“中文”/UTF 編碼字符結束。 有沒有辦法改變這種情況? 這與整理有關嗎? 謝謝!
你所擁有的正在按預期工作。 以下面的例子為例:
SELECT HASHBYTES('SHA1','B8187F0D-5DBA-4D43-95FC-CD5A009DB98C');
這將返回varbinary
值0xA04B9CB18A2DC4BC08B83FCCE48A0AF1A1390756
。 然后您將該值轉換為nvarchar
,因此得到類似N'䮠놜ⶊ별레찿諤㦡嘇'
(根據我的整理)。 對於varbinary
每 4 個字符代表一個字符。 因此,對於上面的A04B
是第一個字符(即N'䮠'
)。
看來您所追求的是一個表示varbinary
值的varchar
(此處不需要nvarchar
,因為將沒有 unicode 字符)。 為此,您需要使用CONVERT
和樣式代碼。 對於我上面給出的示例,它將是:
SELECT CONVERT(varchar(100),HASHBYTES('SHA1','B8187F0D-5DBA-4D43-95FC-CD5A009DB98C'),1);
它返回varchar
值'0xA04B9CB18A2DC4BC08B83FCCE48A0AF1A1390756'
。 如果您不想在'0x'
使用'0x'
,請使用樣式代碼2
,而不是1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.