SQL SERVER:字符串或二进制数据将被截断。为nvarchar

时间:2015-05-20 08:10:25

标签: sql sql-server tsql

我试图插入下表:

enter image description here

但由于某种原因,我不能在slabel1字段中插入超过250个字符,即使它的大小为500.每次发生这种情况时我都会收到以下错误:

  

字符串或二进制数据将被截断。声明一直如此   终止。

我不明白为什么。

2 个答案:

答案 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 and nvarchar

  

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