【问题标题】:Database options: why by default "SET ANSI_NULLS OFF" is OFF for new databases?数据库选项:为什么默认情况下“SET ANSI_NULLS OFF”对于新数据库是关闭的?
【发布时间】:2016-08-22 12:28:33
【问题描述】:

使用 SSMS 2014:

当我使用 SSMS 创建新数据库时,新数据库在默认设置下有些奇怪

ALTER DATABASE [del] SET ANSI_NULL_DEFAULT OFF 
GO
ALTER DATABASE [del] SET ANSI_NULLS OFF 
GO
ALTER DATABASE [del] SET ANSI_PADDING OFF 
GO
ALTER DATABASE [del] SET ANSI_WARNINGS OFF 
GO
ALTER DATABASE [del] SET ARITHABORT OFF 

当我测试脚本和存储过程时,似乎 ANSI_NULLS 实际上是 ON。

我很困惑为什么当我创建数据库时像 ANSI_NULLS 这样重要的设置是关闭的?以及它是如何在我的脚本中变为 ON 的?

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    它如何在我的脚本中变为 ON?

    使用 SET 语句设置的连接级别设置会覆盖 ANSI_NULLS 的默认数据库设置。
    默认情况下,ODBC 和 OLE DB 客户端在连接到 SQL Server 实例时发出连接级 SET 语句,将会话的 ANSI_NULLS 设置为 ON。

    我很困惑为什么当我创建数据库时像 ANSI_NULLS 这样重要的设置是关闭的?

    我已经创建了关闭和打开空值的数据库,但是每次我尝试插入时,客户端驱动程序都会为我生成这些设置选项为 ON

    下面是 MSDN 对此的看法。

    在 SQL Server 的未来版本中,ANSI_NULLS 将始终为 ON,任何显式将该选项设置为 OFF 的应用程序都会产生错误。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

    最接近,我能想到为什么这个选项设置为ON,可能是由于兼容性

    【讨论】:

    • 仍然奇怪和不清楚为什么 MS 选择默认使用 ANSI NULLS OFF 创建新数据库。特别是考虑到您引用的 MSDN 中的文本,表明将来即使将 ANSI_NULLS 显式设置为 False,它们也会引发错误。我不记得在安装服务器时注意到这样的选择。但是,您可以在名为“模型”的系统数据库中更改此设置,它是创建的所有新数据库的模型。模型中的设置将作为新数据库的默认设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2019-06-04
    • 2018-10-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多