KB4055758 - 修正: SQL SERVERの CHAR データと BINARY データの末尾に末尾の空白を返す場合の一貫性のない動作

適用先
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Service Pack 1 SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows

現象

1 つ以上のインデックスが組み込まれている Microsoft SQL Server テーブルがあるとします。 テーブルに対してクエリを実行すると、SQL SERVER CHAR 列と BINARY 列に対して一貫性のないデータパディングが実行される可能性があります。 CHAR および BINARY データ列の末尾に末尾の空白を返す場合の一貫性のない動作は、次の条件によって異なります。

  • SQL Server テーブルで列を作成するときのANSI_PADDINGの設定。
  • 列に対してテーブル スキャンまたはインデックス シークを実行する決定。

原因

特定のシナリオでは、SQL Serverは、データ配信を高速化するために多くの操作をバイパスできる最適化を実行する場合があります。 この問題は、SQL Serverが上記のシナリオに最適化を適用できないことを認識していないために発生します。

追加情報

SQL Serverのこの動作は、Char データと Varchar データの使用に関する記事に記載されている動作に準拠していません。

char NULL 列の作成時に ANSI_PADDING が ON の場合は、char NOT NULL 列と同じように動作します。値は列のサイズに合って右に埋められます。 char NULL 列の作成時に ANSI_PADDING が OFF の場合、ANSI_PADDING OFF に設定された varchar 列のように動作します。末尾の空白は切り捨てられます。

解決策

この問題は、SQL Serverの次の累積的な更新プログラムで修正されています。

SQL Server 2017 の累積的な更新プログラム 2

SQL Server 2016 の累積的な更新プログラム 9

SQL Server 2016 SP1 の累積的な更新プログラム 6

SQL Server 2014 SP2 の累積的な更新プログラム 8

SQL Server 2014 SP1 の累積的な更新プログラム 7

SQL Serverの累積的な更新プログラムについて:

SQL Serverの各新しい累積的な更新プログラムには、すべての修正プログラムと、以前の累積的な更新プログラムに含まれていたすべてのセキュリティ修正プログラムが含まれています。 SQL Serverの最新の累積的な更新プログラムを確認してください。

SQL Server 2017 の最新の累積的な更新プログラム

SQL Server 2016 の最新の累積的な更新プログラム

SQL Server 2014 の最新の累積的な更新プログラム

状態

Microsoft は、「適用対象」セクションに記載されている Microsoft 製品の問題であることを確認しました

参考資料

マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。