因为我经常使用许多不同的数据库,所以我将MySQL切换到ANSI模式,以便为我的代码带来一些一致性。这样我可以使用双引号作为列名,使用||
进行连接,这对于大多数数据库来说都是正常的(MSSQL,它似乎不使用||
)。
除兼容性外,不在MySQL中切换到ANSI模式有什么好处?
答案 0 :(得分:1)
评论有点长。 ANSI模式 - 在documentation中有详细解释 - 基本上是语言的一些风格变化。这些变化可能看起来很小,但它们违背了MySQL的历史。
换句话说,使用ANSI模式意味着"传统"不一定支持MySQL代码。是好还是坏?要看。如果您需要与其他数据库兼容,那就很好。如果您需要与遗留代码兼容,那就太糟糕了。
答案 1 :(得分:1)
来自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中关闭此模式 off 时(如果ANSI
被禁用会发生此情况),则表示您可以使用GROUP BY
查询选择未显示在聚合中的列或在GROUP BY
子句中。这样的查询可能会在任何其他数据库上完全失败,除了MariaDB之外。此外,如果您在禁用ONLY_FULL_GROUP_BY
模式的松弛情况下编写所有查询,那么如果您尝试将代码移植到另一个数据库,则可能会面临许多查询的主要重构。
我建议你坚持使用ANSI标准。在ONLY_FULL_GROUP_BY
的情况下,坚持它只是良好的数据库实践,而其他次要的化妆品要求是您可能已经在做的事情。