mysql database sqlite postgresql types

Comparación de tipos de columna de base de datos en MySQL, PostgreSQL y SQLite?(Cross-Mapping)



database types (1)

Estoy tratando de encontrar una forma de relacionar los tipos de columnas en 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


Lista de cosas que haría de manera diferente:

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

MySQL BOOLEAN (alias BOOL, alias TINYINT (1)) no es compatible con el tipo pg booleano. Puede o no ser capaz de portar aplicaciones según lo que usen como literales booleanos. En MySQL, los mapas TRUE y FALSE son valores enteros 1 y 0. Parece que el tipo pg BOOLEAN usa una notación literal de cadena. Por lo tanto, las aplicaciones pueden ser portátiles o no, al menos no son reemplazos.

Finalmente, para la última línea en su tabla, creo que la frase SQLite debe leer:

INTEGER PRIMARY KEY AUTOINCREMENT

Esto es más o menos equivalente a

BIGINT PRIMARY KEY AUTO_INCREMENT

en MySQL En postgres, el tipo de datos SERIAL resulta en una columna INTEGER, y esto será casi lo mismo que MySQL

INTEGER PRIMARY KEY AUTO_INCREMENT

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

Lo que me faltaba:

Me falta INTEGER (alias INT) para MySQL. Es comparable a INTEGER en la pág. Omisiones muy importantes: VARCHAR y CHAR. Semánticamente, VARCHAR en MySQL y PG, y CHAR en MySQL y PG son los mismos, 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 64 kb, 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 múltiples bytes, debe dividir 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 asignan ambos a TEXT

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

Creo que el tipo de datos VARBINARIO de MySQL se puede comparar mejor con el tipo de datos BYTEA de PG. (pero, de hecho, los tipos BLOB de MySQL también se asignan a eso)

El tipo FLOAT en MySQL debería ser equivalente a REAL en postgres (y REAL en SQLite también). El tipo DECIMAL en MySQL es equivalente a DECIMAL en postgres, excepto que en postgres, el tipo no impone un límite arbtrary a la precisión, mientras que en MySQL la precisión máxima es (creo) 70. (es decir, 70 posiciones de números) Para MySQL y Postgres, NUMERIC es un alias para el tipo DECIMAL.