为什么在不指定长度的情况下将文本转换为varchar会将文本截断为30个字符?

时间:2009-04-22 14:08:52

标签: sql-server text casting varchar

我正在搜索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,如果这是一个可配置的设置?

3 个答案:

答案 0 :(得分:6)

答案 1 :(得分:1)

当有许多不同的行需要适合该列时,可能会发生强制转换。数据库引擎,因为它不完美,不想麻烦地检查查询可能返回的所有可能行的长度,以找出设置最大值的时间,因此它不会检查任何行 - 它只需要默认值30,这是一个随意的粗略猜测,因为它不知道更好。

可以说,他们可能很聪明地将默认值设置为256,或者VARCHAR的最大长度,但我想这比什么都重要,这是一个有用的提醒,它真的不知道多长时间除非你说出来,否则你想要它。

答案 2 :(得分:0)

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

相关问题