【问题标题】:Why does casting text as varchar without specifying a length truncate the text at 30 characters?为什么在不指定长度的情况下将文本转换为 varchar 会将文本截断为 30 个字符?
【发布时间】:2009-04-22 14:08:51
【问题描述】:

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

【问题讨论】:

标签: sql-server text casting varchar


【解决方案1】:

【讨论】:

  • 我把你的别名读成 NVARCHAR :) 这就是你使用 SQL 太多的结果
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2020-10-29
      • 2011-02-18
      • 2011-06-03
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多