sql >> Databasteknik >  >> RDS >> Oracle

postgreSQL mysql oracle skillnader

För några år sedan var jag tvungen att skriva en översättningsmotor; du matar den med en uppsättning sql och det översätts till dialekten för den för närvarande anslutna motorn. Min motor fungerar på Postgres (AKA PostgreSql), Ingres, DB2, Informix, Sybase och Oracle - åh, och ANTS. Uppriktigt sagt är Oracle min minsta favorit (mer om det nedan)... Tyvärr för dig finns inte mySql och SQL Server på listan (vid den tiden ansågs ingen av dem vara ett seriöst RDBMS - men tiderna förändras).

Utan hänsyn till motorns kvalitet eller prestanda - och enkelhet att göra och återställa säkerhetskopior - här är de primära skillnaderna:

  • datatyper
  • gränser
  • ogiltiga
  • reserverade ord
  • nollsemantik (se nedan)
  • citattemantik (enkelt citattecken ", dubbla citattecken " eller antingen)
  • semantik för slutförande av uttalanden
  • funktionssemantik
  • datumhantering (inklusive konstanta sökord som "nu" och inmatnings-/utdatafunktionsformat)
  • om inline-kommentarer är tillåtna
  • maximala attributlängder
  • högsta antal attribut
  • anslutningssemantik/säkerhetsparadigm.

Utan att tråka ut dig på all konverteringsdata, här är ett exempel på en datatyp, lvarchar:

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

Den största affären av allt, enligt min mening, är nollhantering; Oracle SILENTLY konverterar tomma indatasträngar till nollvärden. ...Någonstans, för LÄNGE sedan, läste jag en artikel som någon hade skrivit om "The Seventeen Meanings of Null" eller något sådant och den verkliga poängen är att nollor är mycket värdefulla och skillnaden mellan en nollsträng och en tom sträng är användbart och icke-trivialt! Jag tror att Oracle gjorde ett stort misstag på den här; ingen av de andra har detta beteende (som jag någonsin har sett).

Min näst minsta favorit var ANTS eftersom de, till skillnad från alla andra, UPPFÖLJDE de fåniga reglerna för perfekt syntax som absolut ingen annan gör och även om de kan vara det enda DB-företaget som tillhandahåller perfekt efterlevnad av standarden, är de också en kunglig smärta i rumpan att skriva kod för.

Överlägset min favorit är Postgres; det är väldigt snabbt i _real_world_ situationer, har bra stöd och är öppen källkod/gratis.



  1. Motsvarar unpivot() i PostgreSQL

  2. Introduktion till SQL-kommandon

  3. JDBC returnerar MySQLSyntaxError Undantag med korrekt sats

  4. Hur man konverterar Excel-ark till SQLite-databas i Android