mysql - MySQL、PostgreSQL、SQLite中数据库列类型的比较? (交叉映射)

标签 mysql database sqlite postgresql types

我正在尝试寻找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/

相关文章:

MySQL 与 GROUP BY 语句发生错误(查询错误 : Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column)

mysql inner join with null select 结果?

php - 如何验证整数值以避免 SQL 注入(inject)?

database - 两个字段及其反向的唯一约束

sqlite - 如何在sqlite3中的特定位置中查找每月的字段总和

sql - 在 sqlite 中从 DATETIME 获取月份

java - Hibernate + MySQL - 如何获得不可猜测的生成 ID?

MySQL外键选择多个选项

mysql - sql - 从数据库中的所有对象名称中删除字符

ios - 在 Coredata 中,如何获取特定表的所有 ID?