我做了很多测试和一些研究,但我找不到解决方案
我如何在 SQL Server 中将字符串转换为 HEX Utf16 LittleEndian 以获得这样的结果?
SELECT CONVERT(VARBINARY(MAX), 'P384992') as key
实际结果
0x50333834393932
需要的结果
0x5000330038003400390039003200
这里的主要问题是您正在使用
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 完全重叠。