Kilka lat temu musiałem napisać silnik tłumaczący; karmisz go jednym zestawem sql i przekłada się to na dialekt aktualnie podłączonego silnika. Mój silnik działa na Postgres (AKA PostgreSql), Ingres, DB2, Informix, Sybase i Oracle - och i ANTS. Szczerze mówiąc, Oracle jest moim najmniej ulubionym (więcej na ten temat poniżej).
Bez względu na jakość lub wydajność silnika – oraz łatwość tworzenia i przywracania kopii zapasowych – oto główne obszary różnic:
- typy danych
- limity
- nieprawidłowe
- zarezerwowane słowa
- pusta semantyka (patrz poniżej)
- semantyka cudzysłowów (pojedynczy cudzysłów „, podwójny cudzysłów” lub jedno z nich)
- semantyka uzupełniania instrukcji
- semantyka funkcji
- obsługa dat (w tym stałe słowa kluczowe, takie jak „teraz” i formaty funkcji wejścia/wyjścia)
- czy dozwolone są komentarze w tekście
- maksymalne długości atrybutów
- maksymalna liczba atrybutów
- semantyka połączenia / paradygmat bezpieczeństwa.
Nie nudząc Cię wszystkimi danymi konwersji, oto próbka dla jednego typu danych, lvarchar:
oracle=varchar(%x) sybase=text db2="long varchar" informix=lvarchar postgres=varchar(%x) ants=varchar(%x) ingres=varchar(%x,%y)
Moim zdaniem największą ze wszystkich jest obsługa zerowa; Oracle SILENTLY konwertuje puste ciągi wejściowe na wartości null. …Gdzieś, DUŻY czas temu, przeczytałem artykuł, który ktoś napisał na temat „Siedemnastu znaczeń wartości zerowych” lub czegoś podobnego, i tak naprawdę chodzi o to, że wartości null są bardzo cenne, a rozróżnienie między łańcuchem pustym a łańcuchem pustym jest przydatne i nietrywialne! Myślę, że Oracle popełniło ogromny błąd w tym przypadku; żaden z pozostałych nie ma takiego zachowania (którego kiedykolwiek widziałem).
Moim drugim najmniej faworytem były ANTS, ponieważ w przeciwieństwie do wszystkich innych, WYKONUJĄC głupie zasady doskonałej składni, których absolutnie nikt inny nie robi i chociaż mogą być jedyną firmą DB, która zapewnia doskonałe przestrzeganie standardu, są również królewskim bólem w tyłek do pisania kodu.
Zdecydowanie moim ulubionym jest Postgres; jest bardzo szybki w sytuacjach _real_world_, ma świetne wsparcie i jest open source / bezpłatny.