sql >> Databáze >  >> RDS >> PostgreSQL

Porovnání typů databázových sloupců v MySQL, PostgreSQL a SQLite? (Křížové mapování)

Seznam věcí, které bych udělal jinak:

MEDIUMINT v MySQL je zvláštní kachna (3 bajty). Vyhnul bych se tomu, ale jinak to namapujte také na INTEGER.

MySQL BOOLEAN (jinak BOOL, alias TINYINT(1) ) není kompatibilní s typem pg boolean. Aplikace můžete nebo nemusíte přenášet v závislosti na tom, co používají jako booleovské literály. V MySQL se TRUE a FALSE mapují na 1 a 0 celočíselné hodnoty. Vypadá to, že typ pg BOOLEAN používá zápis řetězcového literálu. Aplikace tedy mohou nebo nemusí být přenosné – alespoň to není žádná náhrada.

Konečně, na posledním řádku ve vaší tabulce si myslím, že SQLite fráze by měla znít:

INTEGER PRIMARY KEY AUTOINCREMENT

To je zhruba ekvivalentní

BIGINT PRIMARY KEY AUTO_INCREMENT

v MySQL. V postgresu výsledkem datového typu SERIAL je sloupec INTEGER, což bude přibližně stejné jako u MySQL

INTEGER PRIMARY KEY AUTO_INCREMENT

Postgres má také typ BIGSERIAL, který je stejný jako SERIAL, ale místo typu INT má typ BIGINT.

Co mi uniklo:

Chybí mi INTEGER (alias INT) pro MySQL. Je srovnatelný s INTEGER na str. Velmi důležitá opomenutí:VARCHAR a CHAR. Sémanticky jsou VARCHAR v MySQL a PG a CHAR v MySQL a PG stejné, ale v MySQL mají tyto typy mnohem kratší maximální délku. V MySQL mohou mít tyto typy maximálně o něco méně než 64 kb, v pg 1 Gb (bajty). Specifikátor skutečné délky je vyjádřen v počtu znaků, takže pokud máte vícebajtovou znakovou sadu, musíte vydělit maximální délku maximálním počtem znaků, abyste získali teoretickou maximální délku specifikovanou pro tuto znakovou sadu. V SQLite mapují VARCHAR a CHAR oba na TEXT

Datové typy BIT v MySQL a PG mají zhruba stejnou sémantiku, ale v MySQL je maximální délka datového typu BIT 64 (bitů)

Myslím, že datový typ MySQL VARBINARY je nejlépe srovnatelný s datovým typem BYTEA PG. (ale typy BLOB MySQL se na to také mapují)

Typ FLOAT v MySQL by měl být ekvivalentní REAL v postgresu (a REAL také v SQLite) Typ DECIMAL v MySQL je ekvivalentní DECIMAL v postgresu, kromě toho, že v postgresu typ neklade libovolný limit na přesnost, zatímco v Maximální přesnost MySQL je (věřím) 70. (tj. 70 číselných pozic) Pro MySQL i Postgres je NUMERIC alias pro typ DECIMAL.




  1. Způsobeno:java.lang.NoSuchMethodError:org.postgresql.core.BaseConnection.getEncoding()Lorg/postgresql/core/Encoding;

  2. Oblíbené triky pro ladění výkonu

  3. Vizualizace dat

  4. Ukládání souborů v databázi versus souborový systém