sql >> Database teknologi >  >> RDS >> PostgreSQL

Sammenligning af databasekolonnetyper i MySQL, PostgreSQL og SQLite? (Cross-mapping)

Liste over ting, jeg ville gøre anderledes:

MEDIUMINT i MySQL er en ulige and (3 bytes). Jeg ville undgå det, men ellers map det til INTEGER også.

MySQL BOOLEAN (alias BOOL, alias TINYINT(1) ) er ikke kompatibel med pg boolean-typen. Du kan muligvis ikke portere apps afhængigt af, hvad de bruger som booleske bogstaver. I MySQL kortlægger TRUE og FALSE til 1 og 0 heltalsværdier. Det ser ud til, at pg BOOLEAN-typen bruger strengnotation. Så apps kan eller kan ikke være bærbare - i det mindste er det ingen drop i erstatning.

Til sidst, for den sidste linje i din tabel, tror jeg, at SQLite-sætningen skal læse:

INTEGER PRIMARY KEY AUTOINCREMENT

Dette svarer nogenlunde til

BIGINT PRIMARY KEY AUTO_INCREMENT

i MySQL. I postgres resulterer SERIAL-datatypen i en INTEGER-kolonne, og dette vil omtrent være det samme som MySQL's

INTEGER PRIMARY KEY AUTO_INCREMENT

Postgres har også en BIGSERIAL-type, som er den samme som SERIAL, men med en BIGINT-type i stedet for en INT-type.

Hvad jeg gik glip af:

Jeg mangler INTEGER (alias INT) til MySQL. Det kan sammenlignes med INTEGER på side. Meget vigtige udeladelser:VARCHAR og CHAR. Semantisk er VARCHAR i MySQL og PG, og CHAR i MySQL og PG de samme, men i MySQL har disse typer en meget kortere maksimal længde. I MySQL kan disse typer maksimalt have lidt mindre end 64kb, i pg 1Gb (bytes). Den faktiske længdeangivelse er udtrykt i antallet af tegn, så hvis du har et multi-byte tegnsæt, skal du dividere den maksimale længde med det maksimale antal tegn for at få den teoretiske maksimale længde angivet for det pågældende tegnsæt. I SQLite knytter VARCHAR og CHAR begge til TEXT

BIT-datatyperne i MySQL og PG har nogenlunde samme semantik, men i MySQL er den maksimale længde af BIT-datatypen 64 (bit)

Jeg tror, ​​at MySQL VARBINARY-datatypen bedst kan sammenlignes med PG's BYTEA-datatype. (men MySQL's BLOB-typer knytter sig også til det)

FLOAT-typen i MySQL skal svare til REAL i postgres (og REAL i SQLite også) DECIMAL-typen i MySQL svarer til DECIMAL i postgres, bortset fra at i postgres sætter typen ikke en vilkårlig grænse for præcisionen, hvorimod i MySQL er den maksimale præcision (tror jeg) 70. (det vil sige 70 talpositioner) For både MySQL og Postgres er NUMERIC et alias for typen DECIMAL.




  1. Lagre en fil i en database i modsætning til filsystemet?

  2. @@DATEFIRST – Få ugens første dag i SQL Server

  3. Sådan fjerner du ledende og efterfølgende tegn i SQL Server

  4. Cyklusdetektion med rekursiv subquery factoring