SQL Server NChar数据类型

在本教程中,将学习如何使用SQL Server NCHAR数据类型来存储固定长度的Unicode字符串数据。

要在数据库中存储固定长度的Unicode字符串数据,请使用SQL Server NCHAR数据类型:

NCHAR(n)

在此语法中,n指定字符串长度,范围从14000NCHAR值的存储大小是n个字节的两倍。

NCHAR的ISO同义词是NATIONAL CHARNATIONAL CHARACTER,因此可以互换使用它们。

CHAR数据类型类似,只能使用NCHAR存储固定长度的字符串。如果数据值的长度是可变的,则应考虑使用VARCHARNVARCHAR数据类型。

CHAR与NCHAR比较

以下是CHARNCHAR数据类型之间的主要区别:

CHAR NCHAR
仅存储非Unicode字符。 以UNICODE UCS-2字符的形式存储Unicode字符。
需要1个字节来存储一个字符。 需要2个字节来存储一个字符。
存储大小等于列定义或变量声明中指定的大小。 存储大小等于列定义或变量声明中指定的大小的两倍。
最多可存储8000个字符。 最多可存储4000个字符。

SQL Server NCHAR示例

以下语句是用来创建一个包含一个NCHAR列的新表:

CREATE TABLE test.sql_server_nchar (
    val NCHAR(1) NOT NULL
);

以下INSERT语句将中文汉字:"易"插入NCHAR列:

INSERT INTO test.sql_server_nchar (val)
VALUES
    (N'易');

请注意,必须在Unicode字符串常量前加上字母N前缀。否则,SQL Server会将字符串转换为数据库的默认代码页,这可能无法识别某些特定的Unicode字符。

如果插入长度大于列定义中指定长度的字符串,SQL Server将发出错误并终止该语句。

例如,以下语句尝试将包含两个字符的字符串插入test.sql_server_nchar表的val列中:

INSERT INTO test.sql_server_nchar (val)
VALUES
    (N'在线789');

SQL Server发出以下错误消息:

消息 8152,级别 16,状态 13,第 1 行
将截断字符串或二进制数据。
语句已终止。

要查找val列的字符数和字节数,可以使用LENDATALENGTH函数,如下所示:

SELECT
    val,
    len(val) length,
    DATALENGTH(val) data_length
FROM
    test.sql_server_nchar;

执行上面查询语句,得到以下结果:

在本教程中,学习了如何使用SQL Server NCHAR数据类型在数据库中存储固定长度的Unicode字符串。


上一篇: SQL Server数据类型 下一篇: SQL Server数据定义