SQL:为什么SYS.COLUMNS显示的列具有与我设置的属性不同的属性

时间:2012-12-06 12:22:54

标签: sql sql-server

我在数据库中添加了一个表,其中包含以下列名和数据类型

“ID”bigInt,“Description”nchar(11)

如果我检查表的设计视图,列的数据类型就像我设置它们一样。

如果我编写的查询将从SYS.COLUMNS获取该表中的列,则列属性不同,例如(描述的max_length为22,而不是11)

有人可以解释为什么会这样吗?

如果相关,我使用的是Microsoft SQL Server企业版(64位)。

1 个答案:

答案 0 :(得分:12)

sys.columns中的列max_length显示最大长度(以字节为单位)。 nchar是双字节,因此11个字符需要22个字节。

如果您想要使用INFORMATION_SCHEMA.COLUMNS

的字符数
select COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'YourTable'

或者你可以使用函数COLUMNPROPERTY

select name,
       columnproperty(object_id, name, 'charmaxlen') as charmaxlen
from sys.columns
where object_name(object_id) = 'YourTable'