sql >> Base de Datos >  >> RDS >> PostgreSQL

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

Lista de cosas que haría diferente:

MEDIUMINT en MySQL es un pato extraño (3 bytes). Lo evitaría, pero también lo asignaría a INTEGER.

MySQL BOOLEAN (alias BOOL, alias TINYINT(1) ) no es compatible con el tipo booleano pg. Es posible que pueda o no portar aplicaciones según lo que usen como literales booleanos. En MySQL, VERDADERO y FALSO se asignan a valores enteros 1 y 0. Parece que el tipo pg BOOLEAN usa notación literal de cadena. Por lo tanto, las aplicaciones pueden o no ser portátiles, al menos no es un reemplazo directo.

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

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 da como resultado una columna INTEGER, y esto será casi lo mismo que

de 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 perdí:

Me falta INTEGER (alias INT) para MySQL. Es comparable a INTEGER 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 como máximo un poco menos de 64kb, en pg 1Gb (bytes). El especificador de longitud real se expresa en la cantidad de caracteres, por lo que si tiene un conjunto de caracteres de varios bytes, debe dividir la longitud máxima por la cantidad máxima de caracteres para obtener la longitud máxima teórica especificada para ese conjunto de caracteres. En SQLite, VARCHAR y CHAR se asignan 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 MySQL VARBINARY es mejor comparable al 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 debe 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 arbitrario en 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.