Vor ein paar Jahren musste ich eine Übersetzungsmaschine schreiben; Sie füttern es mit einem Satz SQL und es übersetzt in den Dialekt der aktuell verbundenen Engine. Meine Engine funktioniert auf Postgres (AKA PostgreSql), Ingres, DB2, Informix, Sybase und Oracle – oh, und ANTS. Ehrlich gesagt ist Oracle mein Favorit (mehr dazu weiter unten)... Unglücklicherweise für Sie stehen mySql und SQL Server nicht auf der Liste (zu der Zeit wurde beides nicht als ernsthaftes RDBMS angesehen - aber die Zeiten ändern sich).
Unabhängig von der Qualität oder Leistung der Engine – und der Einfachheit der Erstellung und Wiederherstellung von Backups – sind hier die Hauptunterschiede:
- Datentypen
- Grenzen
- ungültig
- reservierte Wörter
- Null-Semantik (siehe unten)
- Zitatsemantik (einfaches Anführungszeichen ', doppeltes Anführungszeichen " oder beides)
- Anweisungsvervollständigungssemantik
- Funktionssemantik
- Datumsbehandlung (einschließlich konstanter Schlüsselwörter wie 'jetzt' und Eingabe-/Ausgabefunktionsformate)
- ob Inline-Kommentare erlaubt sind
- maximale Attributlängen
- maximale Anzahl von Attributen
- Verbindungssemantik / Sicherheitsparadigma.
Ohne Sie mit all den Konvertierungsdaten zu langweilen, hier ist ein Beispiel für einen Datentyp, lvarchar:
oracle=varchar(%x) sybase=text db2="long varchar" informix=lvarchar postgres=varchar(%x) ants=varchar(%x) ingres=varchar(%x,%y)
Der größte Deal von allen ist meiner Meinung nach das Null-Handling; Oracle wandelt leere Eingabezeichenfolgen OHNE RUHE in Nullwerte um. ... Irgendwo, vor LANGER Zeit, habe ich einen Artikel gelesen, den jemand über "Die siebzehn Bedeutungen von Null" oder so ähnlich geschrieben hatte, und der eigentliche Punkt ist, dass Nullen sehr wertvoll sind und der Unterschied zwischen einer Nullzeichenkette und einer leeren Zeichenkette ist nützlich und nicht trivial! Ich denke, Oracle hat hier einen großen Fehler gemacht; Keiner der anderen hat dieses Verhalten (das ich je gesehen habe).
Mein zweitschlechtester Favorit war ANTS, weil sie im Gegensatz zu allen anderen die dummen Regeln für eine perfekte Syntax durchgesetzt haben, die absolut niemand sonst tut, und obwohl sie vielleicht das einzige DB-Unternehmen sind, das den Standard perfekt einhält, sind sie auch eine königliche Qual der Hintern, für den Code geschrieben werden soll.
Bei weitem mein Favorit ist Postgres; es ist sehr schnell in Situationen der _realen_Welt_, bietet großartige Unterstützung und ist Open Source / kostenlos.