繁体   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