PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comparaison des types de colonnes de base de données dans MySQL, PostgreSQL et SQLite ? (Mappage croisé)

Liste des choses que je ferais différemment :

MEDIUMINT dans MySQL est un canard impair (3 octets). Je l'éviterais, mais sinon, mappez-le également sur INTEGER.

Le MySQL BOOLEAN (alias BOOL, alias TINYINT(1) ) n'est pas compatible avec le type booléen pg. Vous pouvez ou non être en mesure de porter des applications en fonction de ce qu'elles utilisent comme littéraux booléens. Dans MySQL, TRUE et FALSE correspondent aux valeurs entières 1 et 0. Il semble que le type pg BOOLEAN utilise la notation littérale de chaîne. Ainsi, les applications peuvent ou non être portables - au moins, il n'y a pas de remplacement.

Enfin, pour la dernière ligne de votre tableau, je pense que la phrase SQLite devrait se lire :

INTEGER PRIMARY KEY AUTOINCREMENT

C'est à peu près équivalent à

BIGINT PRIMARY KEY AUTO_INCREMENT

dans MySQL. Dans postgres, le type de données SERIAL donne une colonne INTEGER, et cela sera à peu près le même que MySQL

INTEGER PRIMARY KEY AUTO_INCREMENT

Postgres a également un type BIGSERIAL, qui est identique à SERIAL mais avec un type BIGINT au lieu d'un type INT.

Ce que j'ai raté :

Il me manque INTEGER (alias INT) pour MySQL. Il est comparable à INTEGER dans pg. Omissions très importantes :VARCHAR et CHAR. Sémantiquement, VARCHAR dans MySQL et PG, et CHAR dans MySQL et PG sont identiques, mais dans MySQL, ces types ont une longueur maximale beaucoup plus courte. Dans MySQL ces types peuvent avoir un maximum d'un peu moins de 64ko, en pg 1Go (octets). Le spécificateur de longueur réel est exprimé en nombre de caractères, donc si vous avez un jeu de caractères multi-octets, vous devez diviser la longueur maximale par le nombre maximum de caractères pour obtenir la longueur maximale théorique spécifiée pour ce jeu de caractères. Dans SQLite, VARCHAR et CHAR correspondent tous les deux à TEXT

Les types de données BIT dans MySQL et PG ont à peu près la même sémantique, mais dans MySQL, la longueur maximale du type de données BIT est de 64 (bits)

Je pense que le type de données MySQL VARBINARY est le mieux comparable au type de données BYTEA de PG. (mais en effet, les types BLOB de MySQL correspondent également à cela)

Le type FLOAT dans MySQL devrait être équivalent à REAL dans postgres (et REAL dans SQLite aussi) Le type DECIMAL dans MySQL est équivalent à DECIMAL dans postgres, sauf que dans postgres, le type n'impose pas de limite arbitraire à la précision, alors que dans MySQL la précision maximale est (je crois) 70. (c'est-à-dire 70 positions numériques) Pour MySQL et Postgres, NUMERIC est un alias pour le type DECIMAL.