PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Porównanie typów kolumn baz danych w MySQL, PostgreSQL i SQLite? (Mapowanie krzyżowe)

Lista rzeczy, które zrobiłbym inaczej:

MEDIUMINT w MySQL to dziwna kaczka (3 bajty). Unikałbym tego, ale w przeciwnym razie zmapuj go również na INTEGER.

MySQL BOOLEAN (alias BOOL, alias TINYINT(1) ) nie jest zgodny z typem logicznym pg. Możesz lub nie możesz przenosić aplikacji w zależności od tego, czego używają jako literałów logicznych. W MySQL, TRUE i FALSE odwzorowują wartości liczb całkowitych 1 i 0. Wygląda na to, że typ pg BOOLEAN używa notacji z literałami łańcuchowymi. Tak więc aplikacje mogą, ale nie muszą być przenośne – przynajmniej nie jest to wymiana kropli.

Wreszcie, ostatnia linia w Twojej tabeli powinna brzmieć:

INTEGER PRIMARY KEY AUTOINCREMENT

Jest to mniej więcej odpowiednik

BIGINT PRIMARY KEY AUTO_INCREMENT

w MySQL. W postgresie typ danych SERIAL daje w wyniku kolumnę INTEGER i będzie to mniej więcej takie samo jak w przypadku MySQL

INTEGER PRIMARY KEY AUTO_INCREMENT

Postgres ma również typ BIGSERIAL, który jest taki sam jak SERIAL, ale ma typ BIGINT zamiast typu INT.

Co przegapiłem:

Brakuje INTEGER (alias INT) dla MySQL. Jest porównywalna do INTEGER w pg.Bardzo ważne pominięcia:VARCHAR i CHAR. Semantycznie VARCHAR w MySQL i PG oraz CHAR w MySQL i PG są takie same, ale w MySQL te typy mają znacznie krótszą maksymalną długość. W MySQL te typy mogą mieć maksymalnie nieco mniej niż 64 kb, w pg 1 Gb (bajty). Rzeczywisty specyfikator długości jest wyrażony w liczbie znaków, więc jeśli masz zestaw znaków wielobajtowych, musisz podzielić maksymalną długość przez maksymalną liczbę znaków, aby uzyskać teoretyczną maksymalną długość określoną dla tego zestawu znaków. W SQLite VARCHAR i CHAR mapują oba na TEXT

Typy danych BIT w MySQL i PG mają mniej więcej taką samą semantykę, ale w MySQL maksymalna długość typu danych BIT wynosi 64 (bity)

Myślę, że typ danych MySQL VARBINARY jest najlepiej porównywalny z typem danych BYTEA PG. (ale rzeczywiście typy BLOB MySQL również są do tego mapowane)

Typ FLOAT w MySQL powinien być równoważny REAL w postgresie (i REAL również w SQLite) Typ DECIMAL w MySQL jest równoważny DECIMAL w postgresie, z wyjątkiem tego, że w postgresie typ nie nakłada arbitralnego limitu precyzji, podczas gdy w MySQL maksymalna precyzja to (jak sądzę) 70. (czyli 70 pozycji liczbowych) Zarówno dla MySQL, jak i Postgres, NUMERIC jest aliasem typu DECIMAL.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Równoległe unnest() i porządek sortowania w PostgreSQL

  2. Musisz zainstalować postgresql-server-dev-X.Y do budowania rozszerzenia po stronie serwera lub libpq-dev do budowania aplikacji po stronie klienta

  3. Jak upsertować pandy DataFrame do tabeli PostgreSQL?

  4. Migracja baz danych PostgreSQL ze środowiska lokalnego do chmury przy użyciu AWS RDS

  5. Jaka jest równoważna składnia PostgreSQL dla Oracle CONNECT BY ... START WITH?