类型系统:ANSI SQL(标准)与 Postgres、Oracle、DB2

Dav*_*542 0 oracle postgresql ansi-sql

这是一个非常普遍的问题,我希望找到一位既熟悉标准又熟悉一些数据库系统的专家。从高层次来看,SQL 标准中描述的类型系统与 Postgres、Oracle 或 DB2 中实现的类型系统之间有哪些差异。

我只是在编造一些东西(这是不正确的——只是用来显示我感兴趣的比较类型的格式),但一个例子可能是这样的:

标准 Postgres 甲骨文
INTERVAL类型 不存在,最接近的是TIME 与标准相同。

(顺便说一句,这个问题对于 DBA 来说会更好吗?)

Lau*_*lbe 5

很少有人能够给你一个完整的列表,所以我只会告诉你我所知道的,而不声称完整。我也将自己限制在我更了解的数据库上。

\n

对数据库实施的评论描述了与标准的偏差。

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
SQL标准PostgreSQL甲骨文评论
CHARACTER\xe2\x9c\x94空字符串被视为 NULL奇怪的标准规定的语义;避免
CHARACTER VARYING\xe2\x9c\x94空字符串被视为 NULL
CHARACTER LARGE OBJECT非标准名称textvarchar\xe2\x9c\x94
NATIONAL CHARACTER\xe2\x9c\x94空字符串被视为 NULL过时的
NATIONAL CHARACTER VARYING\xe2\x9c\x94空字符串被视为 NULL过时的
NATIONAL CHARACTER LARGE OBJECT非标准名称textvarchar空字符串被视为 NULL过时的
BINARY LARGE OBJECT非标准名称bytea\xe2\x9c\x94
NUMERIC\xe2\x9c\x94\xe2\x9c\x94
DECIMAL\xe2\x9c\x94\xe2\x9c\x94几乎与NUMERIC
SMALLINT\xe2\x9c\x94\xe2\x9c\x94 (与 相同类型NUMERIC
INTEGER\xe2\x9c\x94\xe2\x9c\x94 (与 相同类型NUMERIC
BIGINT\xe2\x9c\x94\xe2\x9c\x94 (与 相同类型NUMERIC
FLOAT\xe2\x9c\x94\xe2\x9c\x94 (与 相同类型NUMERIC
REAL\xe2\x9c\x94\xe2\x9c\x94 (与 相同类型NUMERIC,但也有BINARY_FLOAT
DOUBLE PRECISION\xe2\x9c\x94(与 相同类型NUMERIC,但也有BINARY_DOUBLE
BOOLEAN\xe2\x9c\x94\xe2\x9d\x8c (但在 PL/SQL 中允许)
DATE\xe2\x9c\x94实际上是一个时间戳
TIME\xe2\x9c\x94\xe2\x9d\x8c
TIME WITH TIME ZONE\xe2\x9c\x94\xe2\x9d\x8c语义不清楚;避免
TIMESTAMP\xe2\x9c\x94\xe2\x9c\x94
TIMESTAMP WITH TIME ZONE语义与标准不同\xe2\x9c\x94
INTERVAL\xe2\x9c\x94\xe2\x9c\x94
ROW复合类型对象类型
REF\xe2\x9d\x8c\xe2\x9c\x94(非标准语法)
<type> ARRAY\xe2\x9c\x94可变数组类型
<type> MULTISET\xe2\x9d\x8c\xe2\x9d\x8c
XML\xe2\x9c\x94非标准名称XMLTYPE
\n

  • 在 Oracle 中,几乎所有“数字”的标准名称(除了 float 和 double)都是具有不同比例和精度的“NUMBER”的别名。 (2认同)
  • 我想我已经竭尽全力列出了这份清单。我无法将其变成关于数据库数据类型的硕士论文。至于链接,两个数据库都有文档,可以在“数据类型”一章下找到此信息。至于“时区时间”:“12:00:00 欧洲/维也纳”是什么时间(想想夏令时)? (2认同)