我正在尝试寻找relate column types 的方法最常用的数据库: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
最佳答案
我会做不同的事情列表:
MySQL 中的 MEDIUMINT 是一个奇怪的鸭子(3 个字节)。我会避免它,但也将它映射到 INTEGER。
MySQL BOOLEAN(别名 BOOL,别名 TINYINT(1) )与 pg bool 类型不兼容。您可能会或可能无法移植应用程序,具体取决于它们用作 bool 文字的内容。在 MySQL 中,TRUE 和 FALSE 映射到 1 和 0 整数值。看起来 pg BOOLEAN 类型使用字符串文字表示法。所以应用程序可能是可移植的,也可能不是可移植的——至少它不会被替换掉。
最后,对于表格中的最后一行,我认为 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,以 pg 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 - MySQL、PostgreSQL、SQLite中数据库列类型的比较? (交叉映射),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1942586/