Sql server 将Varchar强制转换为固定长度

Sql server 将Varchar强制转换为固定长度,sql-server,casting,Sql Server,Casting,下面的SQL有什么问题吗?在这里,转换为varchar时未使用长度 SELECT CAST('abc' AS varchar) 我应该用吗 SELECT CAST('abc' AS varchar(3)) 只要字符串不超过30个字符,就可以了。 SQL Server将尝试强制转换为默认长度,即30个字符 如果试图强制转换超过此长度的字符串,则字符串将被截断为30个字符 例如: DECLARE @Example VARCHAR(35) = 'aaaaaaaaaaaaaaaaaaaaaaaaa

下面的SQL有什么问题吗?在这里,转换为varchar时未使用长度

SELECT CAST('abc' AS varchar)
我应该用吗

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

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

如果试图强制转换超过此长度的字符串,则字符串将被截断为30个字符

例如:

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

Result
30

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


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

CAST('01234567890123456789012345678901234567890123456789012345678901234567890123456789' as varchar) 

为了更清晰,还可以查看以下内容。

看起来是自动截断,而不是错误:已编辑,谢谢。我引用了一篇不正确的文章作为结果。您不应该仅使用
varchar
,始终指定长度。除了懒惰之外,您还应该始终正确调整字段大小,这只是数据库保护数据完整性的方法之一。