插入UTF-32字符

时间:2014-08-12 08:04:14

标签: sql sql-server encoding utf emoji

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

对于这种情况,我使用:rose并使用以下查询

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

使用(NULL)在Management Studio中返回。

我需要采用什么格式对字符进行编码,使其在SQL Server中不返回null

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

由于它是UTF-32,所以有两个被写为两个UTF-16字符:

-- Returns: ?test
SELECT '' + nchar(0xD83C) + nchar(0xDF39) + 'test'

您可以在链接后的“ UTF-16十六进制(C语法)”标题下找到此代码。

我还必须推荐这篇文章,因为它在调查过程中非常有帮助: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) 代码单位

代理对/两个的NCHAR(0x0-0xFFFF)+ NCHAR(0x0-0xFFFF) UTF-16代码单元

针对UTF-16中的一个或多个字符的CONVERT(NVARCHAR(size),0xHHHH) 小尾数(“ 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数据能够使用UTF-8 编码:

CONVERT(VARCHAR(size),0xHH),用于UTF-8中的一个或多个字符(“ HH” 是1套或多套2个十六进制数字)

注意:CHAR()函数不适用于此目的。它只能 产生一个字节,而UTF-8仅为值0的一个字节– 127 / 0x00 – 0x7F。