确定Nvarchar长度

Kan*_*ves 9 sql sql-server nvarchar

我已经阅读了所有关于varchar与nvarchar的内容.但我没有看到我认为是一个简单问题的答案.如何确定nvarchar柱的长度?对于varchar,它非常简单:例如,我的描述可以包含100个字符,因此我定义了varchar(100).现在我被告知我们需要国际化和支持任何语言.这是否意味着我需要将Description列更改为nvarchar(200),即只需将长度加倍?(而且我忽略了目前国际化所涉及的所有其他问题.)

这么简单吗?

Mar*_*ith 15

一般来说它和varchar真的一样.该数字仍然是最大字符数而不是数据长度.

nvarchar(100) 允许100个字符(在SQL Server中可能占用200个字节).

你可能想要考虑到这样一个事实,即不同的文化可能需要更多的角色来表达同样的事情.

但是,例外情况是您使用SC排序规则(支持增补字符).在这种情况下,单个字符最多可能占用4个字节.

所以最糟糕的情况是将声明的字符值加倍.


小智 9

来自微软网站

一个常见的误解是认为对于nchar( n )nvarchar( n )n定义字符数。但是,在nchar( n )nvarchar(n)中,n定义字节对(0-4,000)中的字符串长度。n从不定义可以存储的字符数。这类似于char( n )varchar( n )的定义。

之所以会出现这种误解,是因为当使用 Unicode 范围 0 到 65,535 中定义的字符时,每个字节对可以存储一个字符。但是,在较高的 Unicode 范围(65,536 到 1,114,111)中,一个字符可以使用两个字节对。例如,在定义为nchar(10)的列中,数据库引擎可以存储使用一个字节对(Unicode 范围 0 到 65,535)的 10 个字符,但使用两个字节对(Unicode 范围 65,536 到 65,536)时少于 10 个字符。 1,114,111)。有关 Unicode 存储和字符范围的详细信息,请参阅UTF-8 和 UTF-16 之间的存储差异