¿Comparación de tipos de columnas de bases de datos en MySQL, PostgreSQL y SQLite? (Mapeo cruzado)


Estoy tratando de encontrar alguna manera de relacionar los tipos de columna a través de las bases de datos más utilizadas: MySQL, PostgreSQL , y SQLite.

Esto es lo que tengo hasta ahora, pero me temo que no está hecho y necesito algunas personas con más experiencia para ayudarme a terminar cualquier tipo que falte.

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
Author: Xeoncross, 2009-12-21

1 answers

Lista de cosas que haría diferente:

MEDIUMINT en MySQL es un pato impar (3 bytes). Lo evitaría, pero de lo contrario mapearlo a INTEGER también.

El BOOLEANO de MySQL (alias BOOL, alias TINYINT(1) ) no es compatible con el tipo booleano pg. Puede o no ser capaz de portar aplicaciones dependiendo de lo que utilizan como literales booleanos. En MySQL, TRUE y FALSE se asignan a valores enteros de 1 y 0. Parece que el tipo BOOLEANO pg usa notación literal de cadena. Así que las aplicaciones pueden o no ser portátil-al menos no es ninguna gota en el reemplazo.

Finalmente, para la última línea en su tabl creo que la frase SQLite debería decir:

INTEGER PRIMARY KEY AUTOINCREMENT

Esto es aproximadamente equivalente a

BIGINT PRIMARY KEY AUTO_INCREMENT

En MySQL. En postgres, el tipo de datos SERIE resulta en una columna ENTERA, y esto será aproximadamente lo mismo que

INTEGER PRIMARY KEY AUTO_INCREMENT

Postgres también tiene un tipo BIGSERIAL, que es el mismo que SERIAL pero con un tipo BIGINT en lugar de un tipo INT.

Lo que yo perdido:

Me falta INTEGER (alias INT) para MySQL. Es comparable al ENTERO en pg. Omisiones muy importantes: VARCHAR y CHAR. Semánticamente, VARCHAR en MySQL y PG, y CHAR en MySQL y PG son lo mismo, pero en MySQL estos tipos tienen una longitud máxima mucho más corta. En MySQL estos tipos pueden tener un máximo de un poco menos de 64kb, en pg 1Gb (bytes). El especificador de longitud real se expresa en el número de caracteres, por lo que si tiene un conjunto de caracteres de varios bytes, debe divida la longitud máxima por el número máximo de caracteres para obtener la longitud máxima teórica especificada para ese conjunto de caracteres. En SQLite, VARCHAR y CHAR mapean ambos a TEXT

Los tipos de datos de BITS en MySQL y PG tienen aproximadamente la misma semántica, pero en MySQL la longitud máxima del tipo de datos de BITS es 64 (bits)

Creo que el tipo de datos VARBINARY de MySQL es mejor comparable al tipo de datos BYTEA de PG. (pero de hecho los tipos de BLOBS de MySQL también se asignan a eso)

El tipo FLOTANTE en MySQL debe ser equivalente a REAL en postgres (y REAL en SQLite también) El tipo DECIMAL en MySQL es equivalente al DECIMAL en postgres, excepto que en postgres, el tipo no impone un límite arbtrario a la precisión, mientras que en MySQL la precisión máxima es (creo) 70. (es decir, 70 posiciones numéricas) Tanto para MySQL como para Postgres, NUMERIC es un alias para el tipo DECIMAL.

 12
Author: Roland Bouman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-21 21:36:51