¿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
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.
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