代码之家  ›  专栏  ›  技术社区  ›  Kevin

为什么不指定长度而将文本强制转换为varchar会将文本截断为30个字符?

  •  3
  • Kevin  · 技术社区  · 15 年前

    我在搜索一个MS-SQLServer2005数据库,以确保某个文本字段的长度始终是8的倍数。当我运行下面的查询时,我发现有几行的长度是30。但当我调查这些记录时,我发现它们比那长。

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

    但是,如果我将varchar的长度指定为更长的长度(如下面的查询中所示),它就可以正常工作。

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

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

    3 回复  |  直到 15 年前
        2
  •  1
  •   thomasrutter    15 年前

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

    可以说,对他们来说,将默认值设置为256或varchar的最大长度可能是明智的,但我想最重要的是,这是一个有用的提示,除非你告诉他们,否则它真的不知道你想要它多长时间。

        3
  •  0
  •   Ryan Brunner    15 年前

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