我在寻找一个MS-SQL Server 2005数据库,以确保一定的文本字段总是8在长度的倍数。当我跑到下面的查询,我得到了几排的长度是30。但是,当我调查的记录,我发现他们都比较长。

select distinct len(cast(textfield as varchar)) from tablename

然而,如果我指定VARCHAR作为东西更长(如下面的查询)的长度,它工作正常。

select distinct len(cast(textfield as varchar(1000))) from tablename

任何人都知道为什么它默认为30,如果这是一个可配置的设置吗?

有帮助吗?

其他提示

当有需要适合该列的许多不同的行

铸造可能发生。数据库引擎,因为它是不完美的,不希望去检查所有可能的行的查询可能会返回找出多久设置最大长度的麻烦,所以它不检查任何行 - 它只是需要30默认为任意大致的推测,因为它不知道更好。

可以说,这可能是聪明的为他们的默认设置为像256,或任何为VARCHAR的最大长度是的,但我想比什么都重要,这是一个有益的提醒,它真的不知道过了多久你想它,除非你告诉它。

这是一个任意数,而据我所知,是不可配置。我想不出一个情况,你不会想指定长度。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top