首页 > 解决方案 > WITH UTF-8 排序规则数据库中 CHAR 和 NCHAR 的区别

问题描述

在 SAP SQL Anywhere(其中数据类型和大多数结构与 SQL Server 非常相似)中,默认数据库排序规则设置为 UTF-8 - 详细设置如下:

在此处输入图像描述

我有一组特殊字符,数据库需要存储和使用(范围:U+1400 - U+167F),并且在测试插入之后,数据类型VARCHARNVARCHAR数据类型都能够容纳这些特殊字符而没有明显差异(除了分配空间) - 见下文:

在此处输入图像描述

当数据库排序规则设置为 UTF-8(使用 UTF8BIN 字符集)时,我是否正确理解CHAR/VARCHAR数据类型默认能够存储 UTF-8 字符集和NCHAR/NVARCHARUTF-16?意思是,如果我只需要 UTF-8 范围,我不必将所有CHAR/VARCHAR对象转换为NCHAR/NVARCHAR: U+1400 - U+167F ?

标签: sql-serverutf-8sqlanywhere

解决方案


回答我自己的问题:

是的,UTF-8 排序规则中的 CHAR 和 VARCHAR 将存储所有字符,但数据类型长度规范会有所不同。定义 varchar 长度时,例如:VARCHAR(100) 我们期望 100 个字符的字符串限制。这仅适用于 1char = 1byte (ASCII) 的字符,对于所有 UTF-8 字符(2-4bytes),数字将指定字节长度,例如:VARCHAR(100) 将只能包含 UTF-8 字符串4 字节 UTF-8 文本的长度为 25 个字符。

请随时纠正我或改进我的答案。


推荐阅读