MySQL,PostgreSQL和SQLite中数据库列types的比较? (跨映射)
我试图find一些方法来关联最常用的数据库中的列types : MySQL , PostgreSQL和SQLite 。
这是我到目前为止,但恐怕没有完成,我需要一些有经验的人来帮助我完成任何缺失的types。
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
我会做不同的事情列表:
MySQL中的MEDIUMINT是一个奇怪的鸭子(3字节)。 我会避免它,但另外映射到INTEGER了。
MySQL BOOLEAN(别名BOOL,别名TINYINT(1))与pg布尔types不兼容。 您可能也可能无法移动应用程序,具体取决于它们用作布尔文字。 在MySQL中,TRUE和FALSE映射到1和0的整数值。 它看起来像pg BOOLEANtypes使用string文字符号。 所以应用程序可能会也可能不是可移植的 – 至less它不会被替代。
最后,对于你的tabl中的最后一行,我认为SQLite的短语应该是:
INTEGER PRIMARY KEY AUTOINCREMENT
这大致相当于
BIGINT PRIMARY KEY AUTO_INCREMENT
在MySQL中。 在postgres中,SERIAL数据types产生一个INTEGER列,这和MySQL的大致相同
INTEGER PRIMARY KEY AUTO_INCREMENT
Postgres也有一个BIGSERIALtypes,它与SERIAL相同,但是用BIGINTtypes而不是INTtypes。
我错过了什么:
我缺lessMySQL的INTEGER(别名INT)。 这是相当于INTEGER在第页。 非常重要的遗漏:VARCHAR和CHAR。 在语义上,MySQL和PG中的VARCHAR和MySQL和PG中的CHAR是相同的,但是在MySQL中,这些types的最大长度要短得多。 在MySQL中,这些types的最大值可以小于64kb,以1Gb(字节)为单位。 实际长度说明符以字符数表示,所以如果您有多字节字符集,则必须将最大长度除以最大字符数,以获得为该字符集指定的理论最大长度。 在SQLite中,VARCHAR和CHAR都映射到TEXT
MySQL和PG中的BIT数据types具有大致相同的语义,但是在MySQL中,BIT数据types的最大长度是64(比特)
我认为MySQL VARBINARY数据types与PG的BYTEA数据types是最好的。 (但的确是MySQL的BLOBtypes也映射到了那个)
MySQL中的FLOATtypes应该相当于postgres中的REAL(也是SQLite中的REAL)MySQL中的DECIMALtypes相当于postgres中的DECIMAL,除了在postgres中,types不会对精度施加任何限制,而在MySQL的最大精度是(我相信)70.(也就是说,70个数字的位置)对于MySQL和Postgres,NUMERIC都是DECIMALtypes的别名。