PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Vergleich von Datenbankspaltentypen in MySQL, PostgreSQL und SQLite? (Cross-Mapping)

Liste der Dinge, die ich anders machen würde:

MEDIUMINT in MySQL ist eine ungerade Ente (3 Bytes). Ich würde es vermeiden, aber ansonsten auch auf INTEGER abbilden.

Der MySQL BOOLEAN (alias BOOL, alias TINYINT(1) ) ist nicht mit dem booleschen Typ pg kompatibel. Abhängig davon, was sie als boolesche Literale verwenden, können Sie Apps möglicherweise portieren oder nicht. In MySQL werden TRUE und FALSE den ganzzahligen Werten 1 und 0 zugeordnet. Es sieht so aus, als ob der pg BOOLEAN-Typ die String-Literal-Notation verwendet. Apps können also portabel sein oder nicht - zumindest ist es kein Drop-in-Ersatz.

Schließlich denke ich, dass die SQLite-Phrase für die letzte Zeile in Ihrer Tabelle wie folgt lauten sollte:

INTEGER PRIMARY KEY AUTOINCREMENT

Dies entspricht in etwa

BIGINT PRIMARY KEY AUTO_INCREMENT

bei MySQL. In Postgres führt der Datentyp SERIAL zu einer INTEGER-Spalte, und dies entspricht ungefähr dem

von MySQL
INTEGER PRIMARY KEY AUTO_INCREMENT

Postgres hat auch einen BIGSERIAL-Typ, der mit SERIAL identisch ist, aber mit einem BIGINT-Typ anstelle eines INT-Typs.

Was ich verpasst habe:

Mir fehlt INTEGER (alias INT) für MySQL. Es ist vergleichbar mit INTEGER in pg.Sehr wichtige Auslassungen:VARCHAR und CHAR. Semantisch sind VARCHAR in MySQL und PG und CHAR in MySQL und PG gleich, aber in MySQL haben diese Typen eine viel kürzere maximale Länge. In MySQL können diese Typen maximal etwas weniger als 64kb haben, in pg 1Gb (Bytes). Der tatsächliche Längenbezeichner wird in der Anzahl der Zeichen ausgedrückt. Wenn Sie also einen Multibyte-Zeichensatz haben, müssen Sie die maximale Länge durch die maximale Anzahl von Zeichen dividieren, um die theoretische maximale Länge zu erhalten, die für diesen Zeichensatz angegeben ist. In SQLite bilden VARCHAR und CHAR beide auf TEXT

ab

Die BIT-Datentypen in MySQL und PG haben ungefähr die gleiche Semantik, aber in MySQL beträgt die maximale Länge des BIT-Datentyps 64 (Bits)

Ich denke, der MySQL-VARBINARY-Datentyp ist am besten mit dem BYTEA-Datentyp von PG vergleichbar. (aber auch die BLOB-Typen von MySQL werden darauf abgebildet)

Der FLOAT-Typ in MySQL sollte REAL in Postgres entsprechen (und REAL in SQLite auch). Die maximale Genauigkeit von MySQL beträgt (glaube ich) 70. (d. h. 70 Zahlenpositionen) Sowohl für MySQL als auch für Postgres ist NUMERIC ein Alias ​​für den DECIMAL-Typ.