当前位置: 首页 > 面试题库 >

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

陆英毅
2023-03-14
问题内容

我正在尝试找到一种在最常用的数据库之间关联列类型的方法: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布尔类型不兼容。您可能无法移植应用程序,具体取决于它们用作布尔文字。在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类型的别名。



 类似资料:
  • 问题内容: 为什么下面的代码即使 long3 == long2* 比较也返回 false ,即使它是文字。 * 问题答案: 是一个对象,而不是原始对象。通过使用您正在比较 参考值 。 您需要做: 正如您在第二次比较中所做的那样。 编辑: 我明白了…您正在考虑其他对象的行为就像文字。他们不*。即使如此,你永远要使用有任何文字。 (* Autobox类型确实实现了flyweight模式,但仅适用于-1

  • 问题内容: 如何比较数据类型? 我需要将存储在数据库中的文件与上传的文件进行比较,但是它说无法比较数据类型,我什至试图将其转换为 谁能帮我? 问题答案: 不要使用不推荐使用的数据类型。 而是使用不具有以下所有限制的替换数据类型 同时,您可以允许进行比较。

  • 你能帮我解决缺栏的问题吗?在我看来,我做的每件事都是对的,但我得到的错误是,某一列有问题。 错误 E/SQLiteLog:(1)没有这样的列:Stezenie D/AndroidRuntime:关闭VM E/AndroidRuntime:致命异常:主进程:com。实例apkadlapacjenta,PID:11261 java。lang.RuntimeException:无法启动活动组件信息{co

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我目前正在使用MySQL数据库开发应用程序。 数据库结构仍在不

  • 主要内容:SQLite 存储类,SQLite 亲和(Affinity)类型,SQLite 亲和类型(Affinity)及类型名称,Boolean 数据类型,Date 与 Time 数据类型SQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。 您可以在创建表的同时使用这些数据类型。SQLite 使用一个更普遍的动态类型系统。在 SQLite 中,值的数据类型与值本身是相关的,而不是与它的容器相关。 SQLite 存储类 每个存

  • 问题内容: 我正在通过Zentus在Java应用程序中使用SQLite。在这种情况下,我需要在数据库中保存和查询Java 值。来自其他RDBMS,我创建了如下表来存储长值: 该解决方案会产生例外的行为,但是在阅读了有关数据类型的SQLite文档之后,我了解到我的类型与使用=> 作为文本存储具有相同的作用。 然后,我决定将其更改为(长度是可变的,并且最多可以存储64位整数,即Java long的长度