SQL Server中如何将字符串转为UTF16小端序十六进制?
在SQL Server中将字符串转换为UTF-16 Little Endian格式的十六进制
默认使用CONVERT(VARBINARY(MAX), 'P384992')得到的是单字节编码的十六进制结果,这是因为不带N前缀的字符串属于VARCHAR类型,会采用数据库默认的单字节字符编码转换。要获取UTF-16 Little Endian格式的十六进制,需要利用SQL Server中NVARCHAR类型的特性——它的底层存储就是UTF-16 Little Endian编码。
解决方案
直接使用带N前缀的Unicode字符串进行转换:
SELECT CONVERT(VARBINARY(MAX), N'P384992') AS key
或者先将普通字符串转换为NVARCHAR类型,再转成二进制:
SELECT CONVERT(VARBINARY(MAX), CAST('P384992' AS NVARCHAR(MAX))) AS key
结果验证
执行上述语句后,得到的结果正是所需的:
0x5000330038003400390039003200
原理说明
- 带
N前缀的字符串会被识别为NVARCHAR类型,SQL Server对NVARCHAR的存储采用UTF-16 Little Endian编码,每个字符占用2个字节。 - 将
NVARCHAR转换为VARBINARY时,会直接输出其底层的字节序列,因此得到每个字符对应两个字节的十六进制结果,符合UTF-16 Little Endian的格式要求。
内容的提问来源于stack exchange,提问作者lpernice
相关产品推荐
相关产品推荐

