SQL Server + 将文本转换为 HEX UTF16 Little Endian

问题描述 投票:0回答:1

我做了很多测试和一些研究,但我找不到解决方案

我如何在 SQL Server 中将字符串转换为 HEX Utf16 LittleEndian 以获得这样的结果?

SELECT CONVERT(VARBINARY(MAX), 'P384992') as key

实际结果

0x50333834393932

需要的结果

0x5000330038003400390039003200

sql sql-server endianness
1个回答
0
投票

这里的主要问题是您正在使用

varchar
作为字符串。
varchar
使用数据库的排序规则,但绝大多数是单字节字符排序规则,因此使用 ANSI-1252 等代码页。因此,将
varchar
转换为
varbinary
将产生每个字符一个字节。

要获得 UTF-16,您需要使用

nvarchar
。正如 siggemannen notes 那样,仅在开始时弹出
N
可能不会产生 UTF-16 值,而是 USC-2 值。要获取 UTF-16 值,您需要确保使用使用增补字符的排序规则,该排序规则在排序规则名称中由 SC 表示。例如
Latin1_General_100_CI_AS_SC
(Latin1-General-100、不区分大小写、区分重音、不区分假名类型、不区分宽度、补充字符)。
所以,看起来像这样:

SELECT CONVERT(varbinary(MAX), N'P384992' COLLATE Latin1_General_100_CI_AS_SC) as [key];

讽刺的是,如果您的字符串中只包含 ANSI 字符,那么只需使用 
nvarchar

文字就可以了,因为 USC-2 和 UTF-16 完全重叠。

    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.