为什么不要创建将ANSI_PADDING设置为OFF的列?

SQL Prompt是一款实用的SQL语法提示工具。它根据数据库的对象名称、语法和代码片段自动进行检索,为用户提供合适的代码选择。自动脚本设置使代码简单易读--当开发者不大熟悉脚本时尤其有用。本文介绍了不要创建将ANSI_PADDING设置为OFF的列。查找永久更改表中某些数据类型检索方式的连接设置,这有点奇怪,但是如果在创建临时或永久表时使用SET ANSI_PADDING OFF,就会发生...
摘要由CSDN通过智能技术生成

SQL Prompt是一款实用的SQL语法提示工具。它根据数据库的对象名称、语法和代码片段自动进行检索,为用户提供合适的代码选择。自动脚本设置使代码简单易读--当开发者不大熟悉脚本时尤其有用。本文介绍了不要创建将ANSI_PADDING设置为OFF的列。

查找永久更改表中某些数据类型检索方式的连接设置,这有点奇怪,但是如果在创建临时或永久表时使用SET ANSI_PADDING OFF,就会发生这种情况。在创建表时,由于设置不当,或者偶然使用带有DBLib连接的旧应用程序,这会导致表中的某些列从那时起奇怪地或不一致地处理某些字符串或二进制数据类型的尾随空格。

此选项已被弃用,在某些时候,它将被删除(它将始终为“on”)。SQL Prompt具有不赞成使用的语法规则DEP013,它将警告您使用此选项以及其他不赞成使用的SET选项。

SQL Prompt使用教程:为什么不要创建将ANSI_PADDING设置为OFF的列?

什么是ANSI填充?为什么?

在SQL的早期,如何处理字符串的问题引起了争议。定义和固定字符串长度的CHAR数据类型旨在使数据检索简单而有效。字符串以指定的长度存储在CHAR数据类型中。对于较短的字符串,数据类型中所有剩余的字符位置都用空格(CHAR)或零(BINARY)填充。这些填充空格是字符串的一部分吗?如果不是,您如何区分故意填充空格的值和自动填充的值?

SQL的早期实现通常在检索数据时修剪掉CHAR中的所有尾随空格,除非该列是NOT NULL。但是,很明显,为了符合ANSI SQL标准,必须对此进行更改。NIST测试套件检查是否始终填充CHAR数据类型,并且对于CHAR或VARCHAR数据类型,用户输入的尾随空格都不会被截断。SQL Server决定,为了遵守规则,将随数据一起检索任何尾随空格(无论是故意还是作为填充自动添加的),对于二进制数据类型的尾随零也是如此。但是,由于在旧的体制下编写了太多代码,因此Transact-SQL中引入了一种称为ANSI_PADDING的设置。当它关闭时,它允许此旧代码照常工作。似乎每个人都很高兴。

一旦有关CHAR数据类型的ANSI-ISO标准争议平息下来,就会引入新的数据类型和新的表类型。ANSI_PADDING争议仅影响当时存在的类型,而用户为此目的定义的长度。现在可以将字符串存储为NVARCHAR、VARCHAR、NCHAR或CHAR的定义大小。二进制数据可以存储为BINARY或VARBINARY的定义大小。对于CHAR(n)、BINARY(n)、VARCHAR(n)或VARBINARY(n)的较早数据类型,在创建表时ANSI_PADDING选项的设置会影响SQL Server随后处理这些字符串的方式。

但是,后来的NCHAR、NVARCHAR、NTEXT、TEXT或IMAGE数据类型并非如此。未定义长度的类型VARBINARY(MAX)、VARCHAR(MAX)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值