sql >> Database >  >> RDS >> Oracle

postgreSQL mysql orakel verschillen

Een paar jaar geleden moest ik een vertaalmachine schrijven; je voert het één set sql in en het vertaalt zich naar het dialect van de momenteel aangesloten engine. Mijn engine werkt op Postgres (AKA PostgreSql), Ingres, DB2, Informix, Sybase en Oracle - oh, en ANTS. Eerlijk gezegd is Oracle mijn minst favoriete (meer daarover hieronder)... Helaas voor jou staan ​​mySql en SQL Server niet op de lijst (destijds werd geen van beide beschouwd als een serieuze RDBMS - maar tijden veranderen).

Zonder rekening te houden met de kwaliteit of prestaties van de engine - en het gemak van het maken en terugzetten van back-ups - zijn hier de belangrijkste verschillen:

  • gegevenstypen
  • limieten
  • ongeldig
  • gereserveerde woorden
  • null-semantiek (zie hieronder)
  • semantiek voor aanhalingstekens (enkel aanhalingsteken ', dubbel aanhalingsteken ", of beide)
  • semantiek voor het invullen van instructies
  • functiesemantiek
  • datumafhandeling (inclusief constante trefwoorden zoals 'nu' en invoer- / uitvoerfunctie-indelingen)
  • of inline reacties zijn toegestaan
  • maximale attribuutlengtes
  • maximaal aantal kenmerken
  • verbindingssemantiek / beveiligingsparadigma.

Zonder je te vervelen met alle conversiegegevens, hier is een voorbeeld voor één gegevenstype, lvarchar:

oracle=varchar(%x) sybase=text db2="lange varchar" informix=lvarchar postgres=varchar(%x) ants=varchar(%x) ingres=varchar(%x,%y)

Het allerbelangrijkste is naar mijn mening nulafhandeling; Oracle converteert STIL blanco invoerstrings naar null-waarden. ...Ergens, een LANGE tijd geleden, las ik een artikel dat iemand had gedaan over "The Seventeen Meanings of Null" of iets dergelijks en het echte punt is dat nulls erg waardevol zijn en het onderscheid tussen een null-string en een lege string is handig en niet triviaal! Ik denk dat Oracle hierin een grote fout heeft gemaakt; geen van de anderen heeft dit gedrag (dat ik ooit heb gezien).

Mijn op één na minst favoriete was ANTS, omdat ze, in tegenstelling tot alle anderen, de dwaze regels voor een perfecte syntaxis AFdwongen die absoluut niemand anders doet en hoewel ze misschien het enige DB-bedrijf zijn dat perfecte naleving van de standaard biedt, zijn ze ook een koninklijke pijn in de kont om code voor te schrijven.

Verreweg mijn favoriet is Postgres; het is erg snel in _real_world_ situaties, heeft geweldige ondersteuning en is open source / gratis.



  1. Is er een manier om de autoincrement-ID op te halen uit een voorbereide instructie?

  2. Android-kamer - Hoe sqlite_sequence voor alle tabellen te wissen

  3. SQL, Bij het verwijderen van cascade en bij het bijwerken van cascade

  4. SQL-, unieke en primaire sleutels