SQL Server中CHAR(13)行为疑惑及PRINT案例结果解析请求
SQL Server中CHAR(10)与CHAR(13)的行为解析
我已经查阅多篇资料了解CHAR(10)是换行符,但对CHAR(13)在SQL Server中的具体行为仍不明确,通过以下测试代码得到了不同的输出结果,产生了对应疑问:
PRINT '----------Case 1----------' DECLARE @str1 nVarchar(MAX) = 'Hello' + CHAR(10) + 'World' PRINT @str1 PRINT '----------Case 2----------' DECLARE @str2 nVarchar(MAX) = 'Hello' + CHAR(13) + 'World' PRINT @str2 PRINT '----------Case 3----------' DECLARE @str3 nVarchar(MAX) = 'Hello' + CHAR(10) + CHAR(13) + 'World' PRINT @str3 PRINT '----------Case 4----------' DECLARE @str4 nVarchar(MAX) = 'Hello' + CHAR(13) + CHAR(10) + 'World' PRINT @str4 PRINT '----------END----------'
核心定义先明确
CHAR(10):对应ASCII码10,即换行符(LF,Line Feed),作用是将光标移动到下一行的同一列位置。CHAR(13):对应ASCII码13,即回车符(CR,Carriage Return),作用是将光标移动到当前行的起始位置。
SQL Server的PRINT语句输出到SSMS(SQL Server Management Studio)消息窗口时,窗口会对这两个字符做特殊显示处理,这是导致不同案例输出差异的核心原因。
Case 1 - 简单换行
CHAR(10)是标准换行符,单独使用时直接触发换行,因此Hello和World分两行显示,符合预期。
Case 2 - 使用CHAR(13)也出现换行的原因
在SSMS消息窗口中,单独的CHAR(13)(回车符)会被解析为换行效果。本质上回车符是让光标回到行首,但如果行首后续有新内容,SSMS会将其处理为换行显示,最终呈现出和CHAR(10)单独使用时一致的换行效果。
Case 3 - 出现两个换行的原因
这里是CHAR(10) + CHAR(13)的组合:
- 首先
CHAR(10)触发换行,光标移动到下一行; - 接着的
CHAR(13)让光标回到当前行开头,而SSMS会将这个单独的回车符再次解析为换行,最终产生两个换行效果,Hello和World之间会间隔一行空白。
Case 4 - 仅出现一个换行的原因
CHAR(13) + CHAR(10)是Windows系统的标准换行组合(CRLF),SSMS会将这个组合识别为一个完整的换行指令,因此只会触发一次换行,Hello和World正常分两行显示。
内容的提问来源于stack exchange,提问作者Lokesh Pande
相关产品推荐
相关产品推荐

