我观察到一种非常奇怪的行为。请考虑以下事项:
declare @a char(15)
set @a = 'ABC'
select len(@a), len(convert(varchar, @a)), convert(varchar, @a) + 'D', len(convert(varchar, @a) + 'D')
在生成的结果集中,值3和4是意外的:
3 3 ABC D 16
它可能是SQL Server中的错误吗?还有其他解释吗?
答案 0 :(得分:3)
char
数据类型是固定宽度,垫有尾随空格。
因此,您的char(15)
值将使用12个尾随空格填充(为了清晰起见,将替换为低分的空格)ABC____________
来自LEN
...
返回指定字符串表达式的字符数, 不包括尾随空白。
DATALENGTH
会计算尾随空格。