首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >改变ANSI填充

改变ANSI填充
EN

Stack Overflow用户
提问于 2020-09-03 13:31:57
回答 2查看 216关注 0票数 1

我有一个开发人员要求将默认的ANSI填充从ON更改为OFF。当然,我最初的回答是否定的,你为什么要这么做.

“我不希望在NVARCHAR、NCHAR列上使用尾随空格。根据文档(下面的链接),在创建列后不能更改设置。此外,它还表示,默认情况下,NVARCHAR / NCHAR列的设置总是打开的,您必须显式地设置它。

我使用'N‘类型的原因是为了使应用程序unicode兼容。

我们是否可以全局设置它,以便在创建新表时不必担心显式设置它?

这是一个问题,也是为什么:填充是开着的,我得到了不想要的尾随空间。由于HTML不考虑unicode长度,额外的空格会影响前端验证。“

部分问题是来源数据是由互联网网站的分析师下载的,目前我们还没有良好的数据质量验证协议,这超出了本文的范围。

还有人要处理这件事吗?如果是这样的话,您是否可以提供不涉及重写proc和函数的替代选项。

这些是Server 2017实例和数据库。

任何建议或链接到文章将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-03 14:54:43

填充物中的一个注释是:

ANSI_PADDING应该始终设置为ON。

这几乎没有讨论的余地。更重要的是,从同样的链接:

SET ANSI_PADDING设置不影响nchar、nvarchar、ntext、text、image、var二进制(Max)、varchar(max)和nvarchar(max)数据类型。他们总是在行为上显示集合ANSI_PADDING。这意味着尾随空格和零不会被修剪。

如果更改现有代码库不可行,您可以做的是在感兴趣的列上使用触发器。如果需要的话,设置触发器的尾随空间。

票数 0
EN

Stack Overflow用户

发布于 2020-09-03 15:35:40

我们是否可以全局设置它,以便在创建新表时不必担心显式设置它?

这是一个会话设置,用户可以随意更改它。

当ansi_padding关闭数据库触发器时,您可以防止/回滚表的创建和更改。

代码语言:javascript
运行
复制
--a bit too strict for tables that do not contain char/binary columns
create or alter trigger ansi_padding_must_be_on   
on database   
for CREATE_TABLE, ALTER_TABLE
as
begin
    --when ansi_padding off, rollback the table creation/alteration
    if SESSIONPROPERTY ('ANSI_PADDING') = 0 -- (16 & @@options) <> 16
    begin
        raiserror(N'ANSI_PADDING must be ON;', 16, 1);
        rollback;
    end
end

如果是这样的话,您是否可以提供不涉及重写proc和函数的替代选项。

您可以安排一个作业,以更新和rtrims每个%varchar%列,直到适当的质量控制到位。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63724757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档