在本教程中,将学习如何使用SQL Server NCHAR
数据类型来存储固定长度的Unicode字符串数据。
要在数据库中存储固定长度的Unicode字符串数据,请使用SQL Server NCHAR数据类型:
NCHAR(n)
在此语法中,n
指定字符串长度,范围从1
到4000
。 NCHAR
值的存储大小是n
个字节的两倍。
NCHAR
的ISO同义词是NATIONAL CHAR
和NATIONAL CHARACTER
,因此可以互换使用它们。
与CHAR
数据类型类似,只能使用NCHAR
存储固定长度的字符串。如果数据值的长度是可变的,则应考虑使用VARCHAR
或NVARCHAR
数据类型。
CHAR与NCHAR比较
以下是CHAR
和NCHAR
数据类型之间的主要区别:
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'易百');
SQL Server发出以下错误消息:
消息 8152,级别 16,状态 13,第 1 行
将截断字符串或二进制数据。
语句已终止。
要查找val
列的字符数和字节数,可以使用LEN
和DATALENGTH
函数,如下所示:
SELECT
val,
len(val) length,
DATALENGTH(val) data_length
FROM
test.sql_server_nchar;
执行上面查询语句,得到以下结果:
在本教程中,学习了如何使用SQL Server NCHAR
数据类型在数据库中存储固定长度的Unicode字符串。