71 votes

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

J'essaie de trouver un moyen de relier les types de colonnes à travers les bases de données les plus utilisées : MySQL , PostgreSQL y SQLite .

Voici ce que j'ai fait jusqu'à présent, mais j'ai peur que ce ne soit pas terminé et j'ai besoin de personnes plus expérimentées pour m'aider à terminer les types manquants.

MySQL                   PostgreSQL          SQLite

TINYINT                 SMALLINT            INTEGER
SMALLINT                SMALLINT
MEDIUMINT               INTEGER
BIGINT                  BIGINT
BIT                     BIT                 INTEGER
_______________________________________________________

TINYINT UNSIGNED        SMALLINT            INTEGER
SMALLINT UNSIGNED       INTEGER
MEDIUMINT UNSIGNED      INTEGER
INT UNSIGNED            BIGINT
BIGINT UNSIGNED         NUMERIC(20)
_______________________________________________________

DOUBLE                  DOUBLE PRECISION    REAL
FLOAT                   REAL                REAL
DECIMAL                 DECIMAL             REAL
NUMERIC                 NUMERIC             REAL
_______________________________________________________

BOOLEAN                 BOOLEAN             INTEGER
_______________________________________________________

DATE                    DATE                TEXT
TIME                    TIME
DATETIME                TIMESTAMP
_______________________________________________________

TIMESTAMP DEFAULT       TIMESTAMP DEFAULT   TEXT
NOW()                   NOW()   
_______________________________________________________

LONGTEXT                TEXT                TEXT
MEDIUMTEXT              TEXT                TEXT
BLOB                    BYTEA               BLOB
VARCHAR                 VARCHAR             TEXT
CHAR                    CHAR                TEXT
_______________________________________________________

columnname INT          columnname SERIAL   INTEGER PRIMARY 
AUTO_INCREMENT                              KEY AUTOINCREMENT

16voto

Roland Bouman Points 15226

Liste des choses que je ferais différemment :

MEDIUMINT dans MySQL est un drôle d'oiseau (3 octets). Je l'éviterais, mais sinon, il faut aussi le faire correspondre à INTEGER.

Le BOOLEAN MySQL (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 à des valeurs entières 1 et 0. Il semble que le type pg BOOLEAN utilise la notation des chaînes de caractères. Les applications peuvent donc être portables ou non - au moins, il ne s'agit pas d'un remplacement direct.

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

INTEGER PRIMARY KEY AUTOINCREMENT

Cela équivaut à peu près à

BIGINT PRIMARY KEY AUTO_INCREMENT

dans MySQL. Dans postgres, le type de données SERIAL donne lieu à une colonne INTEGER, et c'est à peu près la même chose que dans MySQL.

INTEGER PRIMARY KEY AUTO_INCREMENT

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

Ce que j'ai manqué :

Il me manque INTEGER (alias INT) pour MySQL. Il est comparable à INTEGER dans pg. Des omissions très importantes : VARCHAR et CHAR. Sémantiquement, VARCHAR dans MySQL et PG, et CHAR dans MySQL et PG sont les mêmes, mais dans MySQL ces types ont une longueur maximale beaucoup plus courte. Dans MySQL, ces types peuvent avoir une longueur maximale d'un peu moins de 64kb, dans pg 1Gb (bytes). Le spécificateur de longueur réelle 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 maximal 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 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 VARBINARY de MySQL est le plus comparable au type de données BYTEA de PG. (mais en fait, les types BLOB de MySQL correspondent également à ce type).

Le type FLOAT de MySQL devrait être équivalent à REAL de postgres (et REAL de SQLite également). Le type DECIMAL dans MySQL est équivalent à DECIMAL dans postgres, sauf que dans postgres, le type n'impose pas de limite arbitraire sur 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X