2017-08-11 51 views
2

因为我经常使用许多不同的数据库,所以我将MySQL切换到ANSI模式以使我的代码具有一致性。这样,我可以使用双引号列名和||进行级联,这对于大多数数据库(MSSQL,它似乎不使用||)是正常的。MySQL:非ansi模式有什么好处?

除了兼容性,还有没有好处在MySQL中切换到ANSI模式?

回答

0

从MySQL的documentation

ANSI
相当于REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,和(如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 stanadards。在ONLY_FULL_GROUP_BY的情况下,坚持这只是一个很好的数据库实践,其他小的美容要求是你可能已经在做的事情。

+0

事实上,直到最近我才意识到“ONLY_FULL_GROUP_BY”功能,并且从未使用它。我实际上使用MariaDB 10.2,我认为它也是默认的。所以,为了我的目的,我没有损失任何我需要的东西,并获得了兼容的语法。谢谢。 – Manngo

1

这是有点长的评论。 ANSI模式 - 这在documentation中有很好的解释 - 基本上是语言的一些文体变化。这些变化可能看起来很小,但是它们违背了MySQL的历史。

换句话说,使用ANSI模式意味着“传统”MySQL代码不一定受支持。是好还是坏?依靠。如果您需要与其他数据库兼容,那么它很好。如果您需要与旧代码兼容,那么它是不好的。