关于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则还是继续填充以保存值与列定义的长度一致。其他版本尚未测试。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2015-05-28 转载申明