我试图找到一些方法来关联最常用的数据库中的列类型:MySQL,PostgreSQL和SQLite.
这是我到目前为止所做的,但我担心它没有完成,我需要一些有更多经验的人来帮助我完成任何缺失的类型.
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
Roland Bouma.. 15
我做的事情列表不同:
MySQL中的MEDIUMINT是一个奇怪的鸭子(3个字节).我会避免它,但否则也将它映射到INTEGER.
MySQL BOOLEAN(别名BOOL,别名TINYINT(1))与pg布尔类型不兼容.您可能会也可能无法移植应用程序,具体取决于它们用作布尔文字的内容.在MySQL中,TRUE和FALSE映射到1和0整数值.看起来pg BOOLEAN类型使用字符串文字表示法.因此,应用程序可能是也可能不是便携式的 - 至少它没有替代品.
最后,对于tabl中的最后一行,我认为SQLite短语应该是:
INTEGER PRIMARY KEY AUTOINCREMENT
这大致相当于
BIGINT PRIMARY KEY AUTO_INCREMENT
在MySQL中.在postgres中,SERIAL数据类型会产生一个INTEGER列,这与MySQL的大致相同
INTEGER PRIMARY KEY AUTO_INCREMENT
Postgres也有一个BIGSERIAL类型,它与SERIAL相同但是使用BIGINT类型而不是INT类型.
我错过了什么:
我缺少MySQL的INTEGER(别名INT).它与pg中的INTEGER相当.非常重要的遗漏:VARCHAR和CHAR.从语义上讲,MySQL和PG中的VARCHAR以及MySQL和PG中的CHAR是相同的,但在MySQL中,这些类型的最大长度要短得多.在MySQL中,这些类型的最大值可以小于64kb,单位为1Gb(字节).实际长度说明符以字符数表示,因此如果您有多字节字符集,则必须将最大长度除以最大字符数,以获得为该字符集指定的理论最大长度.在SQLite中,VARCHAR和CHAR映射到TEXT
MySQL和PG中的BIT数据类型具有大致相同的语义,但在MySQL中,BIT数据类型的最大长度为64(位)
我认为MySQL VARBINARY数据类型最适合PG的BYTEA数据类型.(但是MySQL的BLOB类型也确实映射到了)
MySQL中的FLOAT类型应该等同于postgres中的REAL(以及SQLite中的REAL)MySQL中的DECIMAL类型等同于postgres中的DECIMAL,除了在postgres中,类型不会对精度施加任何限制,而在MySQL的最大精度是(我相信)70.(即70个数字位置)对于MySQL和Postgres,NUMERIC是DECIMAL类型的别名.
我做的事情列表不同:
MySQL中的MEDIUMINT是一个奇怪的鸭子(3个字节).我会避免它,但否则也将它映射到INTEGER.
MySQL BOOLEAN(别名BOOL,别名TINYINT(1))与pg布尔类型不兼容.您可能会也可能无法移植应用程序,具体取决于它们用作布尔文字的内容.在MySQL中,TRUE和FALSE映射到1和0整数值.看起来pg BOOLEAN类型使用字符串文字表示法.因此,应用程序可能是也可能不是便携式的 - 至少它没有替代品.
最后,对于tabl中的最后一行,我认为SQLite短语应该是:
INTEGER PRIMARY KEY AUTOINCREMENT
这大致相当于
BIGINT PRIMARY KEY AUTO_INCREMENT
在MySQL中.在postgres中,SERIAL数据类型会产生一个INTEGER列,这与MySQL的大致相同
INTEGER PRIMARY KEY AUTO_INCREMENT
Postgres也有一个BIGSERIAL类型,它与SERIAL相同但是使用BIGINT类型而不是INT类型.
我错过了什么:
我缺少MySQL的INTEGER(别名INT).它与pg中的INTEGER相当.非常重要的遗漏:VARCHAR和CHAR.从语义上讲,MySQL和PG中的VARCHAR以及MySQL和PG中的CHAR是相同的,但在MySQL中,这些类型的最大长度要短得多.在MySQL中,这些类型的最大值可以小于64kb,单位为1Gb(字节).实际长度说明符以字符数表示,因此如果您有多字节字符集,则必须将最大长度除以最大字符数,以获得为该字符集指定的理论最大长度.在SQLite中,VARCHAR和CHAR映射到TEXT
MySQL和PG中的BIT数据类型具有大致相同的语义,但在MySQL中,BIT数据类型的最大长度为64(位)
我认为MySQL VARBINARY数据类型最适合PG的BYTEA数据类型.(但是MySQL的BLOB类型也确实映射到了)
MySQL中的FLOAT类型应该等同于postgres中的REAL(以及SQLite中的REAL)MySQL中的DECIMAL类型等同于postgres中的DECIMAL,除了在postgres中,类型不会对精度施加任何限制,而在MySQL的最大精度是(我相信)70.(即70个数字位置)对于MySQL和Postgres,NUMERIC是DECIMAL类型的别名.