当前位置:  开发笔记 > 后端 > 正文

MySQL,PostgreSQL和SQLite中数据库列类型的比较?(跨映射)

如何解决《MySQL,PostgreSQL和SQLite中数据库列类型的比较?(跨映射)》经验,为你挑选了1个好方法。

我试图找到一些方法来关联最常用的数据库中的列类型: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类型的别名.



1> Roland Bouma..:

我做的事情列表不同:

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类型的别名.


EvanCarrol,这很有趣.那么应该在pg中使用什么来存储相当少量的文本,如人名,产品名,简短(比如说,少于255)描述?只是文字?
postgres布尔值不是字符串文字类型,它们只是这样看.如果将它们转换为整数,则将o,1或NULL视为合适,相反,如果你有0,1或NULL整数,则可以将它们转换为boolean.COPY ... FROM接受数字,但INSERT需要一个显式的强制转换或数字周围的引号.所以'0',强制转换(0为boolen),'f'和false都将在插入中工作,期望布尔值.
推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有