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
答案 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会悄悄地截断该值,并可能导致意外错误。