我正在尝试找到一种在最常用的数据库之间关联列类型的方法: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的长度