数年前、私は翻訳エンジンを書かなければなりませんでした。 1セットのSQLをフィードすると、現在接続されているエンジンの方言に変換されます。私のエンジンは、Postgres(AKA PostgreSql)、Ingres、DB2、Informix、Sybase、Oracle、そしてANTSで動作します。率直に言って、Oracleは私の最も嫌いなものです(詳細は以下を参照)...残念ながら、mySqlとSQL Serverはリストに含まれていません(当時、どちらも深刻なRDBMSとは見なされていませんでしたが、時代は変わります)。
エンジンの品質やパフォーマンス、およびバックアップの作成と復元の容易さに関係なく、主な違いは次のとおりです。
- データ型
- 制限
- 無効
- 予約語
- nullセマンティクス(以下を参照)
- 引用セマンティクス(一重引用符'、二重引用符 "、またはそのいずれか)
- ステートメント完了セマンティクス
- 関数のセマンティクス
- 日付処理(「now」などの定数キーワードや入出力関数形式を含む)
- インラインコメントが許可されているかどうか
- 属性の最大長
- 属性の最大数
- 接続セマンティクス/セキュリティパラダイム。
すべての変換データに飽きることなく、1つのデータ型lvarcharのサンプルを次に示します。
oracle =varchar(%x)sybase =text db2 ="long varchar" informix =lvarchar postgres =varchar(%x)ants =varchar(%x)ingres =varchar(%x、%y)
私の見解では、すべての最大の問題はヌル処理です。 Oracleは、空白の入力文字列をnull値にサイレントに変換します。 ...どこかで、ずっと前に、誰かが「ヌルの17の意味」などについて行った記事を読みました。本当のポイントは、ヌルは非常に価値があり、ヌル文字列と空の文字列の違いは便利で自明ではありません!オラクルはこれについて大きな間違いを犯したと思います。他の誰もこの振る舞いをしていません(私が今まで見たことがあります)。
私の2番目に嫌いなのはANTSでした。他のすべてとは異なり、ANTSは、他の誰も絶対にやらない完璧な構文の愚かなルールを強制しました。また、標準に完全に準拠する唯一のDB企業である可能性がありますが、コードを書くためのお尻。
私のお気に入りはPostgresです。 _real_world_の状況では非常に高速で、優れたサポートがあり、オープンソース/無料です。