【问题标题】:Casting Varchar to fixed length将 Varchar 转换为固定长度
【发布时间】:2013-07-23 17:24:10
【问题描述】:

下面的 SQL 有问题吗?此处转换为 varchar 时没有使用长度。

SELECT CAST('abc' AS varchar)

我应该使用

 SELECT CAST('abc' AS varchar(3))

【问题讨论】:

  • 你应该从不只使用varchar,总是指定一个长度。除了懒惰之外,您还应该始终正确调整字段大小,这只是数据库保护数据完整性的一种方式。

标签: sql-server casting


【解决方案1】:

如果您不指定varchar(n),则n 将被假定为30。例如:如果我们运行下面的查询,我们会得到30 个字符的输出。

CAST('01234567890123456789012345678901234567890123456789012345678901234567890123456789' as varchar) 

还请查看以下msdn article 以获得更清晰的信息。

【讨论】:

    【解决方案2】:

    只要您的字符串不超过 30 个字符,就可以了。
    SQL Server 将尝试强制转换为默认长度,即 30 个字符。

    如果您尝试转换超过此长度的字符串,您的字符串将被截断为 30 个字符。

    例子:

    DECLARE @Example VARCHAR(35) = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' -- 35 Characters
    SELECT LEN(cast(@Example as varchar)) AS [Result]
    
    Result
    30
    

    【讨论】:

    • 看起来是自动截断,而不是错误:sqlfiddle.com/#!3/d41d8/17670
    • 已编辑,谢谢。我为结果引用了一篇不正确的文章。
    【解决方案3】:

    如果您将使用强制转换将数据插入到具有固定长度的列中,则第二条语句将通过截断数据来帮助您避免“字符串或二进制数据将被截断”错误

    SQLException : String or binary data would be truncated

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 2017-06-05
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      相关资源
      最近更新 更多