首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入UTF-32字符

插入UTF-32字符
EN

Stack Overflow用户
提问于 2014-08-12 16:04:14
回答 3查看 640关注 0票数 1

我正在使用SQL Server (2008 R2,10.5)测试UTF32字符(特别是表情符号),并在此阶段检查服务器是否支持给定的代码

在本例中,我将:rose与以下查询一起使用

SELECT '' + nchar(0x1F339) + 'test'

它返回到带有(NULL)的Management Studio中。

在SQL Server中,需要对字符进行哪种格式的编码才能使其不返回null

EN

回答 3

Stack Overflow用户

发布于 2014-08-12 16:42:33

SQL Server仅支持UCS-2,目前(几乎)与UTF-16相同。所以每个字符恰好是2个字节。

票数 -1
EN

Stack Overflow用户

发布于 2014-08-12 17:37:54

一个想法,如果可以的话。您可以将数据存储在与编码无关的二进制或VARBINARY数据字段中。然后,您可以使用映射表或外部脚本将二进制文件解析为文本字段,例如,将0x1F339替换为:rose:或您自己的自定义格式。

票数 -1
EN

Stack Overflow用户

发布于 2020-10-07 00:12:47

因为它是UTF-32,所以它有两个UTF-16字符:

代码语言:javascript
复制
-- 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来说也只是一个字节。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25259139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档