症狀
假設你有一個 Microsoft SQL Server 資料表,上面建有一個或多個索引。 當你查詢資料表時,SQL Server 可能會對 CHAR 和 BINARY 欄位進行不一致的資料填充。 在 CHAR 和 BINARY 資料欄末尾回傳尾隨空白的不一致行為,取決於以下條件:
- SQL Server表中建立欄位時ANSI_PADDING設定。
- 決定對欄位執行資料表掃描或索引尋道。
原因
在某些情況下,SQL Server 可能會進行優化,使其能繞過許多操作以加快資料傳遞速度。 問題發生在 SQL Server 無法識別上述情境下無法套用該優化。
更多資訊
這種 SQL Server 的行為不符合以下文章中所記錄的行為:使用 Char 和 Varchar 資料。
注意
如果 ANSI_PADDING 在建立 char NULL 欄位時是 ON,則其行為與 NOT NULL 欄位相同:值會以右填充至欄位大小。 如果在建立 char NULL 欄位時 ANSI_PADDING 關閉,則行為類似 varchar 欄位,ANSI_PADDING OFF 設定:尾隨的空白會被截斷。
解決方式
此問題已在以下 SQL Server 的累積更新中得到修正:
Cumulative Update 2 for SQL Server 2017
Cumulative Update 6 for SQL Server 2016 SP1
Cumulative Update 8 for SQL Server 2014 SP2
Cumulative Update 7 for SQL Server 2014 SP1
關於 SQL Server 的累積更新:
每次新的 SQL Server 累積更新都包含了之前累積更新中包含的所有熱修補與安全修補。 請查看 SQL Server 的最新累積更新:
狀態
Microsoft 已確認,這確實存在於「適用於」區塊的 Microsoft 產品中
參考資料
了解 Microsoft 用來說明軟體更新的術語。