zoukankan      html  css  js  c++  java
  • 关于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则还是继续填充以保存值与列定义的长度一致。其他版本尚未测试。

  • 相关阅读:
    不同编码字符所占大小
    期末考点总结--------多元统计分析
    博客网站设计
    java 事件举例
    zookerper总结
    Spring java配置
    Sense and Sensibility
    栈的出栈序列个数
    闭算子
    线性空间结论总结
  • 原文地址:https://www.cnblogs.com/meizhouxiang/p/14821422.html
Copyright © 2011-2022 走看看