0

我有一个使用 mysql 5.6 的应用程序尝试使用 mysql 5.7 时,strictmode 存在很多问题,但设置sql-mode = ""让应用程序再次工作。

我的疑问是:在未来的 mysql 版本中,特性 sql-mode 会被保留吗?或者现在最好尝试使用严格模式解决所有问题?

4

1 回答 1

1

通常你会希望在默认模式下运行 MySQL,除非你希望这些错误或警告会产生有价值的反馈。从历史上看,MySQL 一直是一个非常宽松的数据库,它会毫无顾虑地截断数据,它会将值转换为它认为的意思,并且它具有用于分隔列名和表名的特殊语法。许多应用程序已经开始依赖于这种足够接近的处理类型,它们完全没有准备好处理由于其模棱两可或缺乏对严格性的关注而产生的任何反作用。

您可以使用多种SQL 模式来改变这种行为,有时以激进的方式。不需要使用它们,但如果您准备通过修复根本原因来减轻错误,其中一些可能有助于发现问题。有时坏数据只是坏数据,你不在乎。有时,这是一个您没有意识到如此普遍的关键问题。

诸如可能捕获日期转换错误之类的事情NO_ZERO_DATE,许多数据库都充满了 2017 岁的人,除了糟糕的数据之外,没有其他原因,但ANSI_QUOTES改变了"它在更传统数据库中的使用方式的含义。这可能是个坏主意。

我会挑选那些你认为有用的东西,在你的测试环境中使用它们,并确定它们是否暴露了任何错误。这些事情对您的特定应用程序是否重要完全是主观的。

值得注意的是,MySQL 5.7 确实改变了它处理聚合分组子句的方式,如果您将某些值保留为模棱两可,它现在会出错。以前它只会随机选择一行并给你。现在您必须指定您希望他们选择的顺序。这与他们通常的自由放任方法不同,因此大概有一个很好的理由。

于 2017-03-02T08:58:37.703 回答