2017-08-11 20 views
2

私は日常的にさまざまなデータベースを扱っているので、私はMySQLをANSIモードに切り替えて、コードに一貫性を持たせています。このようにして、カラム名には二重引用符を使用し、連結には||を使用することができます。これは通常のデータベース(MSSQLの場合は||を使用していません)です。MySQL:非ansiモードのメリットは何ですか?

互換性は別として、にはありません MySQLのANSIモードに切り替えるには?

答えて

0

:REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、および(MySQLの5.7.5のように)ONLY_FULL_GROUP_BY相当

ANSI

これらのモードの最初の4つは、文字列連結のパイプを許可し、関数名と(文字の間のスペースを無視するなど、ほとんどが小さな美容的なものです。あなたのMySQLコードを別のデータベースに移植するという観点からは、これは煩わしいことですが、かなりの変更は必要ありません。

ただし、ONLY_FULL_GROUP_BYモードは別の話です。このモードがANSIが有効になっている場合に発生するに設定した場合、GROUP BYクエリで集計またはGROUP BY句に表示されない列を選択できます。このようなクエリはおそらくMariaDBを除く他のデータベースでは完全に失敗するでしょう。さらに、ONLY_FULL_GROUP_BYのモードが無効になっているすべてのクエリを記述すると、コードを別のデータベースに移植しようとすると、多くのクエリの主要なリファクタリングに直面する可能性があります。

ANSIスタンダードに固執することをお勧めします。 ONLY_FULL_GROUP_BYの場合、それを遵守するだけでよいデータベースの練習であり、その他の微妙な美容上の要件は、すでに行っていることです。

+0

実際、私は最近までONLY_FULL_GROUP_BY機能を知らず、使用していませんでした。実際にはMariaDB 10.2を使用しています。ここでは、これもデフォルトであると想定しています。だから私の目的のために、私は必要なものを失い、互換性のある構文で得ることができます。ありがとう。 – Manngo

1

これはコメントのために少し長いです。 documentationでよく説明されているANSIモードは、基本的には言語のいくつかの文体的​​な変更です。これらの変更は軽微に見えるかもしれませんが、MySQLの歴史の穀物に逆らっています。

つまり、ANSIモードを使用すると、「伝統的な」MySQLコードが必ずしもサポートされているわけではありません。それって良いのそれとも悪いの?依存します。他のデータベースとの互換性が必要な場合は、それが良いです。レガシーコードとの互換性が必要な場合、それは悪いです。 MySQLのdocumentationから

関連する問題