具有UTF-8归类的数据库中CHAR和NCHAR之间的区别

时间:2019-07-02 18:30:02

标签: sql-server utf-8 sqlanywhere

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

enter image description here

我有一组特殊字符,数据库需要存储和使用这些特殊字符(范围:U + 1400-U + 167F ),并且在测试之后插入VARCHAR和{ {1}}数据类型能够容纳这些特殊字符,没有明显区别(分配的空间除外)-参见下文:

enter image description here

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

1 个答案:

答案 0 :(得分:0)

要回答我自己的问题:

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

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