适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
Analytics Platform System (PDW)
字符数据类型 nchar(大小固定)或 nvarchar(大小可变)。 在 SQL Server 2012(11.x)及更高版本中,当使用启用了补充字符(SC)排序规则时,这些数据类型存储 Unicode 字符数据的完整范围,并使用 UTF-16 字符编码。 若指定了非 SC 排序规则,则这些数据类型仅会存储 UCS-2 字符编码支持的字符数据子集。
nchar [ ( n ) ]
固定大小字符串数据。 n 用于定义字符串大小(以双字节为单位),并且它必须是 1 到 4,000 之间的值。 存储大小为 n 字节的两倍。 对于 UCS-2 编码,存储大小为 n 个字节的两倍,并且可存储的字符数也为 n。 对于 UTF-16 编码,存储大小仍为 n 字节的两倍,但可以存储的字符数可能小于 n,因为补充字符使用两个字节对(也称为代理项对)。 nchar 的 ISO 同义词是 national char 和 national character。
nvarchar [ ( n | max ) ]
可变大小字符串数据。 n 的值定义字节对中的字符串大小,并且可以从 1 到 4,000。 max 指示最大存储大小是 2^31-1 个字符 (2 GB)。 存储大小为 n 字节的两倍 + 2 个字节。 对于 UCS-2 编码,存储大小为 n 个字节的两倍 + 2 个字节,并且可存储的字符数也为 n。 对于 UTF-16 编码,存储大小仍为 2 倍 n 字节 + 2 个字节。 但是,可以存储的字符数可能小于 n,因为补充字符使用两个字节对(也称为 代理项对)。 nvarchar 的 ISO 同义词是 national char varying 和 national character varying。
一个常见误解是,认为在 nchar(n) 和 nvarchar(n) 中,n 定义字符数。 但在 nchar(n) 和 nvarchar(n) 中,n 定义字符串的长度(以双字节为单位)(0-4,000)。 n 不会定义可存储的字符数。 此概念类似于 char 和 varchar 的定义。
出现此误解的原因是,使用在 Unicode 范围 0-65,535 中定义的字符时,每个双字节可以存储一个字符。 但是,在更高的 Unicode 范围(65,536 到 1,114,111)中,一个字符可能使用两个字节对。 例如,在定义为 nchar(10) 的列中,数据库引擎可以存储使用一个双字节(Unicode 范围 0-65,535)的 10 个字符,但在使用两个双字节(Unicode 范围 65,536-1,114,111)时,存储的字符将少于 10 个。 有关 Unicode 存储和字符范围的详细信息,请参阅 UTF-8 与 UTF-16 之间的存储差异。
如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。 如果没有使用 CAST 函数指定 n,则默认长度为 30。
若使用 nchar 或 nvarchar,则建议:
- 如果列数据项的大小一致,则使用 nchar。
- 如果列数据项的大小差异相当大,则使用 nvarchar。
- 如果列数据项大小相差很大,而且字符串长度可能超过 4,000 双字节,请使用 nvarchar(max)。
sysname 是系统提供的用户定义数据类型,除了不可为空外,在功能上与 nvarchar(128) 相同。 sysname 用于引用数据库对象名。
为使用 nchar 或 nvarchar 的对象分配的是默认数据库排序规则,但可使用 子句分配特定排序规则。
对于 nchar 和 nvarchar, 始终为 。 不适用于 nchar 或 nvarchar 数据类型。
在 Unicode 字符字符串常量的前面加上字母 作为前缀来表示 UCS-2 或 UTF-16 输入,具体取决于是否使用了 SC 排序规则。 如果没有前缀,字符串将转换为数据库的默认代码页,这些代码页可能无法识别某些字符。 在 SQL Server 2019(15.x)及更高版本中,使用启用了 UTF-8 的排序规则时,默认代码页能够存储 Unicode UTF-8 字符集。
使用字母为字符串常量添加前缀时,如果要转换的常量不超过 nvarchar 字符串数据类型的最大长度(4,000),则隐式转换将导致 UCS-2 或 UTF-16 字符串。 否则,隐式转换会导致大值 nvarchar(max)。
有关转换字符数据的信息,请参阅 char 和 varchar。 有关在数据类型之间进行转换的详细信息,请参阅 CAST 和 CONVERT。
- ALTER TABLE (Transact-SQL)
- CAST 和 CONVERT (Transact-SQL)
- COLLATE (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- 数据类型 (Transact-SQL)
- DECLARE @local_variable (Transact-SQL)
- LIKE (Transact-SQL)
- SET ANSI_PADDING (Transact-SQL)
- SET @local_variable (Transact-SQL)
- 排序规则和 Unicode 支持
- 单字节和多字节字符集
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/34382.html