症状
假设你有一个 Microsoft SQL Server 表,该表上已生成一个或多个索引。 查询表时,SQL Server 可能会对 CHAR 和 BINARY 列执行不一致的数据填充。 返回 CHAR 和 BINARY 数据列末尾的尾随空白的行为不一致的行为取决于以下条件:
-
在 SQL Server 表中创建列时 ANSI_PADDING 的设置。
-
决定对列执行 "表扫描" 或 "索引查找"。
原因
在某些情况下,SQL Server 可能执行优化,允许它绕过许多操作以加快数据传递速度。 出现此问题的原因是 SQL Server 无法识别在上述情况下无法应用优化。
更多信息
SQL Server 的此行为不符合以下文章中所述的行为:使用 Char 和 Varchar 数据。
如果在创建 char 列时 ANSI_PADDING 是打开的,则它的行为与 char NOT NULL 列的行为相同:将值右填充到列的大小。 如果在创建 char 列时 ANSI_PADDING 处于关闭状态,则其行为类似于 varchar 列,ANSI_PADDING 设置为 OFF:尾随空格将被截断。
解决方案
在 SQL Server 的以下累积更新中修复了此问题:
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
状态
Microsoft 已经确认这是在“适用范围”部分中列出的 Microsoft 产品中存在的问题。
参考
了解 Microsoft 用于描述软件更新的 术语。