Před několika lety jsem musel napsat překladový stroj; dáte mu jednu sadu SQL a přeloží se do dialektu aktuálně připojeného enginu. Můj engine funguje na Postgres (AKA PostgreSql), Ingres, DB2, Informix, Sybase a Oracle - oh, a ANTS. Upřímně řečeno, Oracle je můj nejméně oblíbený (více o tom níže)... Bohužel pro vás, mySql a SQL Server nejsou na seznamu (v té době nebyl ani jeden považován za seriózní RDBMS - ale časy se mění).
Bez ohledu na kvalitu nebo výkon motoru - a snadnost vytváření a obnovy záloh - zde jsou hlavní oblasti rozdílu:
- datové typy
- omezení
- neplatné
- rezervovaná slova
- nulová sémantika (viz níže)
- sémantika uvozovek (jednoduché uvozovky, dvojité uvozovky nebo obojí)
- sémantika dokončení příkazu
- sémantika funkcí
- zpracování data (včetně konstantních klíčových slov jako 'nyní' a formátů vstupních/výstupních funkcí)
- zda jsou povoleny vložené komentáře
- maximální délky atributů
- maximální počet atributů
- sémantika připojení / paradigma zabezpečení.
Aniž bych vás nudil všemi údaji o konverzích, zde je ukázka jednoho datového typu, lvarchar:
oracle=varchar(%x) sybase=text db2="long varchar" informix=lvarchar postgres=varchar(%x) ants=varchar(%x) ingres=varchar(%x,%y)
Největší problém ze všeho je podle mého názoru nulová manipulace; Oracle SILENTLY převádí prázdné vstupní řetězce na hodnoty null. ...Někde, kdysi dávno, jsem četl článek, který někdo napsal o "The Seventeen Meanings of Null" nebo o něčem takovém a skutečným bodem je, že hodnoty null jsou velmi cenné a rozdíl mezi řetězcem null a prázdným řetězcem je užitečné a netriviální! Myslím, že Oracle v tomto udělal obrovskou chybu; žádný z ostatních nemá toto chování (jaké jsem kdy viděl).
Mým druhým nejméně oblíbeným bylo ANTS, protože na rozdíl od všech ostatních VYNUCOVALI hloupá pravidla pro dokonalou syntaxi, která absolutně nikdo nedělá, a i když jsou možná jedinou DB společností, která poskytuje dokonalé dodržování standardu, jsou také královskou bolestí v zadek pro psaní kódu.
Zdaleka můj oblíbený je Postgres; je velmi rychlý v situacích _real_world_, má skvělou podporu a je open source / zdarma.