Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL、PostgreSQL和SQLite中数据库列类型的比较?(交叉映射)_Mysql_Database_Sqlite_Postgresql_Types - Fatal编程技术网

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

MySQL、PostgreSQL和SQLite中数据库列类型的比较?(交叉映射),mysql,database,sqlite,postgresql,types,Mysql,Database,Sqlite,Postgresql,Types,我正试图找到一些方法来跨越最常用的数据库:,和 这是我到目前为止所做的,但恐怕还没有完成,我需要一些有更多经验的人来帮助我完成任何缺少的类型 MySQL PostgreSQL SQLite TINYINT SMALLINT INTEGER SMALLINT SMALLINT MEDIUMINT INTEGER BIGINT

我正试图找到一些方法来跨越最常用的数据库:,和

这是我到目前为止所做的,但恐怕还没有完成,我需要一些有更多经验的人来帮助我完成任何缺少的类型

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是一个奇怪的duck(3字节)。我会避免使用它,但也会将它映射为整数

MySQL布尔值(别名BOOL,别名TINYINT(1))与pg布尔值类型不兼容。根据应用程序用作布尔文本的内容,您可能无法移植应用程序,也可能无法移植应用程序。在MySQL中,TRUE和FALSE映射为1和0整数值。pg布尔类型似乎使用字符串文字表示法。因此,应用程序可能是便携式的,也可能不是便携式的——至少它不是替代品

最后,对于表格中的最后一行,我认为SQLite短语应该是:

INTEGER PRIMARY KEY AUTOINCREMENT
这大致相当于

BIGINT PRIMARY KEY AUTO_INCREMENT
在MySQL中。在postgres中,串行数据类型会产生一个整数列,这与MySQL差不多

INTEGER PRIMARY KEY AUTO_INCREMENT
Postgres还有一个BIGSERIAL类型,它与SERIAL相同,但使用BIGINT类型而不是INT类型

我错过了什么:

我缺少MySQL的整数(别名INT)。它与pg中的整数相当。 非常重要的遗漏: 瓦查尔和查尔。从语义上讲,MySQL和PG中的VARCHAR以及MySQL和PG中的CHAR是相同的,但在MySQL中,这些类型的最大长度要短得多。在MySQL中,这些类型的最大值可以略小于64kb,单位为pg 1Gb(字节)。实际长度说明符以字符数表示,因此,如果您有多字节字符集,则必须将最大长度除以最大字符数,以获得为该字符集指定的理论最大长度。在SQLite中,VARCHAR和CHAR都映射到文本

MySQL和PG中的位数据类型具有大致相同的语义,但在MySQL中,位数据类型的最大长度为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类型的别名。

我想这是事实,不建议交叉映射数据库类型,因为(在我看来)绝对没有时间需要交叉映射。您可能需要将PG转换为My,但不需要将它们交叉映射。为什么不将SQL Server和Oracle添加到表中?这种列类型交叉映射的目的是使解释(甚至使用)
创建表
这三种类型之间的定义变得更加容易。因为它们经常被使用,我发现开源代码需要为它们中的任何一个做好准备。@Xeoncross,也许你可以用我的建议更新你的图表?特别是,需要添加缺少的整数、VARCHAR、CHAR内容。“我认为我的其他建议也是有效的,但没那么重要。”罗兰,很抱歉圣诞节和我一直有点忙。修正了。还有一个区别,在Pg中,只有当您有合理的理由调用它提供的约束时,才使用varchar()。在MySQL中,您这样做是为了有一个快速运行的大型内部内联文本块。在Pg中,它运行较慢,占用了我的房间。在Pg中,您几乎不会使用varchar().EvanCarrol,这很有趣。那么,在pg中应该使用什么来存储相当小的文本位,比如人名、产品名、简短(比如,少于255个)描述?仅仅是文本?postgres布尔不是字符串文字类型,它们只是看起来那样。如果将它们转换为整数,则得出适当的o、1或NULL,反之,如果有0、1或NULL整数,则可以将它们转换为布尔值。COPY…FROM接受数字,但INSERT需要在数字周围加上明确的强制转换或引号。因此,“0”、强制转换(0为boolen)、“f”和false都将在一个需要布尔值的插入中工作。