MySQL: 非ansi模式有什么好处?

MySQL: What is the benefit of non-ansi mode?

因为我经常使用许多不同的数据库,所以我特意将 MySQL 切换到 ANSI 模式以使我的代码保持一定的一致性。这样我就可以对列名使用双引号并使用 || 进行连接,这对大多数数据库来说都是正常的(MSSQL,它似乎不使用 ||)。

除了兼容性之外,在MySQL中切换到ANSI模式有什么好处吗?

评论有点长。 ANSI 模式——在 documentation 中有很好的解释——基本上是对语言的一些风格上的改变。这些变化可能看起来很小,但它们违背了 MySQL.

的历史规律

换句话说,使用ANSI模式意味着不一定支持"traditional" MySQL代码。是好还是坏?要看。如果你需要与其他数据库的兼容性,那很好。如果您需要与遗留代码兼容,那就不好了。

来自MySQL documentation:

ANSI
Equivalent to REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, and (as of MySQL 5.7.5) ONLY_FULL_GROUP_BY.

这些包含的模式中的前四种主要是次要的修饰,例如允许管道用于字符串连接,以及忽略函数名称和 ( 字符之间的空格。从将 MySQL 代码移植到另一个数据库的角度来看,这些会很烦人,但需要相当小的更改。

然而,ONLY_FULL_GROUP_BY模式是另一回事。当此模式在 MySQL 中被 关闭 时(如果 ANSI 被禁用就会发生),那么这意味着你可以有一个 GROUP BY 查询选择未出现在聚合或 GROUP BY 子句中的列。这样的查询可能会在任何其他数据库上完全失败,也许 MariaDB 除外。此外,如果您在禁用 ONLY_FULL_GROUP_BY 松散模式的情况下编写所有查询,那么如果您尝试将代码移植到另一个数据库,您可能会面临许多查询的重大重构。

我建议您坚持使用 ANSI 标准。在 ONLY_FULL_GROUP_BY 的情况下,坚持它只是良好的数据库实践,其他次要的装饰要求可能已经在做。