3

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

4

3 回答 3

8

为什么使用 CAST 时 VARCHAR 的默认长度是 30?

于 2009-04-22T14:17:49.827 回答
1

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

可以说,将默认值设置为 256 或任何 VARCHAR 的最大长度可能是明智的,但我想最重要的是,这是一个有用的提醒,它真的不知道你想要多长时间除非你告诉它。

于 2009-04-22T14:44:09.717 回答
0

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

于 2009-04-22T14:10:57.067 回答