我试图插入下表:
但由于某种原因,我不能在slabel1字段中插入超过250个字符,即使它的大小为500.每次发生这种情况时我都会收到以下错误:
字符串或二进制数据将被截断。声明一直如此 终止。
我不明白为什么。
答案 0 :(得分:7)
您的结果显示列的长度(以字节为单位),而不是它可以存储的字符数。您使用的列是nvarchar列,因此字符将占用2个字节而不是1个,因此在您的情况下(500/2)=最多250个字符
这将显示差异,我们有两列,每列可以容纳50个字符,但nvarchar列的长度为100
CREATE TABLE [#text]
(
[Text] VARCHAR(50),
[NText] NVARCHAR(50)
)
SELECT COL_LENGTH( 'tempdb..#Text' , 'Text' ) [Varchar_Length],
COL_LENGTH( 'tempdb..#Text' , 'NText' ) [NVarchar_Length]
DROP TABLE [#text]
结果是:
Varchar_Length | NVarchar_Length
50 | 100
答案 1 :(得分:1)
因为它是rcsaObject
nchar [(n)]
固定长度的Unicode字符串数据。 n定义字符串 长度,必须是1到4,000之间的值。存储大小是 两次n个字节。排序规则代码页使用双字节时 字符,存储大小仍然是n个字节。取决于 字符串,n个字节的存储大小可以小于该值 为n指定。 nchar的ISO同义词是national char和 民族性..
nvarchar [(n | max)]
可变长度的Unicode字符串数据。 ñ 定义字符串长度,可以是1到4,000之间的值。最大 表示最大存储大小为2 ^ 31-1个字节(2 GB)。该 存储大小(以字节为单位)是输入数据的实际长度的两倍 + 2个字节。 nvarchar的ISO同义词是国家字符变化和国家字符变化。
尝试这个看看差异
NVARCHAR