簡體   English   中英

強制轉換為 NVARCHAR(MAX) 會導致“中文”/UTF 編碼字符

[英]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');

這將返回varbinary0xA04B9CB18A2DC4BC08B83FCCE48A0AF1A1390756 然后您將該值轉換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM