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