我正在使用SQL Server (2008 R2,10.5)测试UTF32字符(特别是表情符号),并在此阶段检查服务器是否支持给定的代码
在本例中,我将:rose与以下查询一起使用
SELECT '' + nchar(0x1F339) + 'test'
它返回到带有(NULL)的Management Studio中。
在SQL Server中,需要对字符进行哪种格式的编码才能使其不返回null
发布于 2014-08-12 16:42:33
SQL Server仅支持UCS-2,目前(几乎)与UTF-16相同。所以每个字符恰好是2个字节。
发布于 2014-08-12 17:37:54
一个想法,如果可以的话。您可以将数据存储在与编码无关的二进制或VARBINARY数据字段中。然后,您可以使用映射表或外部脚本将二进制文件解析为文本字段,例如,将0x1F339替换为:rose:或您自己的自定义格式。
发布于 2020-10-07 00:12:47
因为它是UTF-32,所以它有两个UTF-16字符:
-- Returns: test
SELECT '' + nchar(0xD83C) + nchar(0xDF39) + 'test'您可以在链接后面的“UTF-16Hex (C Syntax)”标题下找到此代码。
此外,我还必须推荐这篇文章,因为它在调查期间非常有帮助:Unicode Escape Sequences Across Various Languages and Platforms (including Supplementary Characters)
对于那些正在寻找答案的人来说,有几个选择:
从技术上讲,
SQL Server没有字符转义序列,但您仍然可以使用字节序列或使用CHAR()和NCHAR()函数的代码点来创建字符。我们在这里只关心Unicode,所以我们将只使用NCHAR()。
所有版本:
用于BMP代码点的NCHAR(0 - 65535) (使用整数/十进制值)
BMP代码点的NCHAR(0x0 - 0xFFFF) (使用二进制/十六进制值)
对于代理项对/两个UTF-16代码单元,NCHAR(0 - 65535) + NCHAR(0 - 65535)
对于代理项对/两个UTF-16代码单元,NCHAR(0x0 - 0xFFFF) + NCHAR(0x0 - 0xFFFF)
CONVERT(NVARCHAR(size),0xHHHH)用于UTF-16 Little Endian中的一个或多个字符(“HHHH”是1组或多组4个十六进制数字)
从SQL Server 2012开始:
如果数据库的默认排序规则支持补充字符(排序规则名称以_SC结尾,或以SQL Server 2017开头的名称包含140但不以_BIN*结尾,或以SQL Server 2019开头的名称以_UTF8结尾但不包含_BIN2),则可以为NCHAR()指定补充字符代码点:
十进制值最高可达1114111
十六进制值最高可达0x10FFFF
从SQL Server 2019开始:
“_UTF8”排序规则使CHAR和VARCHAR数据能够使用UTF8编码:
UTF-8中一个或多个字符的CONVERT(VARCHAR(size),0xHH) (“HH”是1组或多组2个十六进制数字)
注意: CHAR()函数不适用于此目的。它只能产生一个字节,并且UTF-8对于值0- 127 / 0x00 -0x7F来说也只是一个字节。
https://stackoverflow.com/questions/25259139
复制相似问题