CAST表达式中varchar和varchar(50)之间的区别?

时间:2014-09-06 22:19:39

标签: sql sql-server performance

SQL Server中varchar和varchar(50)有什么区别?

SELECT CAST(customer_id AS varchar) AS Expr1 FROM tbl_customer

VS

SELECT CAST(customer_id AS varchar(50)) AS Expr1 FROM tbl_customer

2 个答案:

答案 0 :(得分:5)

默认情况下,如果未提供长度,则创建长度为30的Varchar。

请参阅:

declare @test varchar(100)
select @test = '1234567890123456789012345678901234567890'

SELECT CAST(@test AS varchar) as resultDefaultLength, 
    CAST(@test AS varchar(50)) as           resultSpecifiedLength

输出:

resultDefaultLength resultSpecifiedLength
123456789012345678901234567890  1234567890123456789012345678901234567890

只要您的customer_ids不超过30个字符,就没有区别。

编辑:

jpw指出:

  

在CAST / CONVERT的上下文中也是如此,否则为默认值   长度是1个字符。文档:在数据定义中未指定n时   或变量声明语句,默认长度为1.当n为   使用CAST和CONVERT函数时未指定,默认值   长度是30。

e.g。在声明varchar(以及可能的其他内容?)时,如果没有给出长度,则其长度为1.以上面的示例为例并略微修改:

declare @test varchar
select @test = '1234567890123456789012345678901234567890'

SELECT CAST(@test AS varchar) as resultDefaultLength, 
    CAST(@test AS varchar(50)) as           resultSpecifiedLength

输出:

resultDefaultLength resultSpecifiedLength
1   1

答案 1 :(得分:1)

根据MSDN,如果没有为varchar指定长度,则在使用CAST时默认为30。如果您没有指定长度,则SQL Server会悄悄地截断该值,并可能导致意外错误。