Mysql 5.7 sql-避免严格的模式
Mysql 5.7 sql-mode for avoid strictness
我有一个使用 mysql 5.6 的应用程序
尝试 mysql 5.7 严格模式有很多问题,但设置 sql-mode = ""
让应用程序再次运行。
我的疑惑是:在未来的mysql版本中,sql-mode功能会被维护吗?或者现在最好尝试用严格模式解决所有问题?
通常您会希望 运行 MySQL 处于默认模式,除非您希望这些错误或警告会产生有价值的反馈。从历史上看,MySQL 一直是一个非常宽松的数据库,它 运行 无忧无虑地处理事情,它将值转换为它认为你的意思,并且它有一个特殊的语法来分隔列和 table名字。许多应用程序已经开始依赖这种足够接近 的处理类型,在这种情况下,它们完全没有准备好应对由于模糊性或缺乏对严格性的关注而产生的任何反作用。
您可以使用许多 SQL modes 来改变这种行为,有时甚至是激进的方式。没有使用它们的要求,但其中一些可能有助于确定问题 如果 如果您准备好通过修复根本原因来减轻错误。有时坏数据就是坏数据,你不在乎。有时这是一个您没有意识到的关键问题如此普遍。
像NO_ZERO_DATE
这样的东西可能会捕获日期转换错误,很多数据库都是2017岁的人,除了数据不好之外没有其他原因,但是ANSI_QUOTES
改变了[=12的含义=] 如何在更传统的数据库中使用它。这可能是个坏主意。
我会挑选那些您认为有用的东西,让它们参与您的测试环境,并确定它们是否暴露了任何错误。这些东西对您的特定应用程序是否重要完全是主观的。
值得注意的是 MySQL 5.7 确实改变了它处理聚合分组子句的方式,如果您将某些值保留为不明确,它现在会出错。以前它只是选择一个随机行并给你。现在您必须指定您希望他们选择的顺序。这与他们通常的自由放任方法不同寻常,因此大概有一个很好的理由。
我有一个使用 mysql 5.6 的应用程序
尝试 mysql 5.7 严格模式有很多问题,但设置 sql-mode = ""
让应用程序再次运行。
我的疑惑是:在未来的mysql版本中,sql-mode功能会被维护吗?或者现在最好尝试用严格模式解决所有问题?
通常您会希望 运行 MySQL 处于默认模式,除非您希望这些错误或警告会产生有价值的反馈。从历史上看,MySQL 一直是一个非常宽松的数据库,它 运行 无忧无虑地处理事情,它将值转换为它认为你的意思,并且它有一个特殊的语法来分隔列和 table名字。许多应用程序已经开始依赖这种足够接近 的处理类型,在这种情况下,它们完全没有准备好应对由于模糊性或缺乏对严格性的关注而产生的任何反作用。
您可以使用许多 SQL modes 来改变这种行为,有时甚至是激进的方式。没有使用它们的要求,但其中一些可能有助于确定问题 如果 如果您准备好通过修复根本原因来减轻错误。有时坏数据就是坏数据,你不在乎。有时这是一个您没有意识到的关键问题如此普遍。
像NO_ZERO_DATE
这样的东西可能会捕获日期转换错误,很多数据库都是2017岁的人,除了数据不好之外没有其他原因,但是ANSI_QUOTES
改变了[=12的含义=] 如何在更传统的数据库中使用它。这可能是个坏主意。
我会挑选那些您认为有用的东西,让它们参与您的测试环境,并确定它们是否暴露了任何错误。这些东西对您的特定应用程序是否重要完全是主观的。
值得注意的是 MySQL 5.7 确实改变了它处理聚合分组子句的方式,如果您将某些值保留为不明确,它现在会出错。以前它只是选择一个随机行并给你。现在您必须指定您希望他们选择的顺序。这与他们通常的自由放任方法不同寻常,因此大概有一个很好的理由。