關於SET ANSI_PADDING的作用


Sql Server 中經常會用到會自動生成SET ANSI_PADDING { ON | OFF }語句,具體作用是什么呢?

  一、Sql Server的填充和裁剪規則是,char和varchar指的是在值的尾部對空格的填充或裁剪,binary和varbinary指的是在值的尾部對零的填充或裁剪。 

  二、如果ANSI_PADDING設置為ON,char(n)和binary(n)會根據Sql Server的填充規則進行填充(如果值可為NULL,則賦值為NULL時不填充),填充以達到列的長度;varchar(n) 或 varbinary(n)則根據實際情況進行存儲。

  比如:char(10)和varchar(10),如果賦值為'hello'(不包括引號),那么char(10)就會以'hello     '(不包括引號,hello后有5個空格),varchar就會只存儲'hello'(不包括引號),所以varchar會根據實際的賦值情況分配空間,char則會根據長度定義進行填充。

  同理,binary(4)和varbinary(4) 如果賦值為0x00ee,那么binary(4)會以0x00ee0000存儲;varbinary(4)就會只存儲為0x00ee。

如果在賦值或插入記錄時char和varchar尾隨有空格或binary和varbinary尾隨有零,如'hello  '(不包括引號)和0x00ee00,Sql Server會直接存儲,不做任何處理,相當於空格和零是值的一部分。

  三、如果ANSI_PADDING設置為OFF,char和binary將不會在尾部用空格或零進行填充,如果char、varchar、binary和varbinary的值尾隨有空格或零,Sql Server將按裁剪規則進行裁剪存儲。

  四、此設置只影響新列的定義,創建列后,SQL Server會基於創建列時的設置存儲這些值,以后對此設置的更改不會影響現有的列。

  五、SET ANSI_PADDING 的默認值為 ON。SQL Server 的 SQL Server Native Client ODBC 驅動程序和 SQL Server Native Client OLE DB 提供程序在連接時會自動將 ANSI_PADDING 設置為 ON。

  六、針對char和binary,在如果ANSI_PADDING設置為OFF時是否要在尾部進行填充以達到列長度,不同的Sql Server版本不一致Sql Server 2000是不填充,Sq Server 2008則還是繼續填充以保存值與列定義的長度一致。其他版本尚未測試。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM