数年前、私は翻訳エンジンを書かなければなりませんでした。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値にサイレントに変換します。...どこかで、ずっと前に、誰かが「Nullの17の意味」などについて行った記事を読みました。本当のポイントは、nullは非常に価値があり、null文字列と空の文字列の違いは便利で自明ではありません!オラクルはこれについて大きな間違いを犯したと思います。他のどれもこの振る舞いをしていません(私が今まで見たことがあります)。
私の2番目に嫌いなのはANTSでした。他のすべてとは異なり、ANTSは、他の誰も絶対にやらない完璧な構文の愚かなルールを強制しました。また、標準に完全に準拠する唯一のDB企業である可能性がありますが、コードを書くためのお尻。
私のお気に入りはPostgresです。_real_world_の状況では非常に高速で、優れたサポートがあり、オープンソース/無料です。