PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Comparação de tipos de coluna de banco de dados no MySQL, PostgreSQL e SQLite? (Mapeamento cruzado)


Lista de coisas que eu faria diferente:

MEDIUMINT no MySQL é um pato estranho (3 bytes). Eu o evitaria, mas, caso contrário, mapeie-o para INTEGER também.

O MySQL BOOLEAN (alias BOOL, alias TINYINT(1) ) não é compatível com o tipo boolean pg. Você pode ou não ser capaz de portar aplicativos dependendo do que eles usam como literais booleanos. No MySQL, TRUE e FALSE mapeiam para valores inteiros 1 e 0. Parece que o tipo pg BOOLEAN usa notação literal de string. Portanto, os aplicativos podem ou não ser portáteis - pelo menos não há substituição.

Finalmente, para a última linha da sua tabela, acho que a frase SQLite deve ser:
INTEGER PRIMARY KEY AUTOINCREMENT

Isso é aproximadamente equivalente a
BIGINT PRIMARY KEY AUTO_INCREMENT

em MySQL. No postgres, o tipo de dados SERIAL resulta em uma coluna INTEGER, e isso será aproximadamente o mesmo que o do MySQL
INTEGER PRIMARY KEY AUTO_INCREMENT

O Postgres também possui um tipo BIGSERIAL, que é o mesmo que SERIAL, mas com um tipo BIGINT em vez de um tipo INT.

O que eu perdi:

Estou faltando INTEGER (alias INT) para MySQL. É comparável a INTEGER em pg.Omissões muito importantes:VARCHAR e CHAR. Semanticamente, VARCHAR no MySQL e PG, e CHAR no MySQL e PG são os mesmos, mas no MySQL esses tipos têm um comprimento máximo muito menor. No MySQL esses tipos podem ter no máximo um pouco menos de 64kb, em pg 1Gb (bytes). O especificador de comprimento real é expresso no número de caracteres, portanto, se você tiver um conjunto de caracteres de vários bytes, será necessário dividir o comprimento máximo pelo número máximo de caracteres para obter o comprimento máximo teórico especificado para esse conjunto de caracteres. No SQLite, VARCHAR e CHAR mapeiam ambos para TEXT

Os tipos de dados BIT no MySQL e no PG têm aproximadamente a mesma semântica, mas no MySQL o comprimento máximo do tipo de dados BIT é 64 (bits)

Eu acho que o tipo de dados MySQL VARBINARY é melhor comparável ao tipo de dados BYTEA do PG. (mas, de fato, os tipos BLOB do MySQL também mapeiam para isso)

O tipo FLOAT no MySQL deve ser equivalente a REAL no postgres (e REAL no SQLite também) MySQL a precisão máxima é (eu acredito) 70. (isto é, 70 posições numéricas) Para MySQL e Postgres, NUMERIC é um alias para o tipo DECIMAL.