前面寫了《SQL Server ->> 字符串對比》講了SQL Server在做字符串對比和排序時的對尾隨空格的處理方法。
再說說有一個和字符串尾隨空格相關聯的東西就是SET ANSI_PADDING選項。
這個選項只在數據表的字符串字段被更新或者新的數據行插入到表中的時候作用。它控制着SQL Server在遇到字符串尾隨空格時是否截斷空格,以及是否填充空格以達到預定義的字符字段長度。
對於已經存儲到表里面的字符串數據字段,是不會受影響的(前提是沒有在本次被更新)。而且它也只是影響某些字符串類型,像char, varchar, binary, 和varbinary。其他的字符串類型像nchar, nvarchar, ntext, text, image, varbinary(max), varchar(max), and nvarchar(max)並不受影響,原因是它們本身是永遠開啟SET ANSI_PADDING為ON的。
微軟是建議永遠開啟這個選項。
設置 |
char(n) NOT NULL 或 binary(n) NOT NULL |
char(n) NULL 或 binary(n) NULL |
varchar(n) 或 varbinary(n) |
---|---|---|---|
ON |
填充原始值(char 列具有尾隨空格的值,binary 列具有尾隨零的值),以達到列的長度。 |
如果 SET ANSI_PADDING 為 ON,則遵從與 char(n) 或 binary(n) NOT NULL 相同的規則。 |
不剪裁插入 varchar 列中的字符值的尾隨空格。 不剪裁插入 varbinary 列中的二進制值的尾隨零。 不將值填充到列的長度。 |
OFF |
填充原始值(char 列具有尾隨空格的值,binary 列具有尾隨零的值),以達到列的長度。 |
如果 SET ANSI_PADDING 為 OFF,則遵從與 varchar 或 varbinary 相同的規則。 |
剪裁插入 varchar 列中的字符值的尾隨空格。 剪裁插入 varbinary 列中的二進制值的尾隨零。 |