Comparison of Relational Database Management Systems
Comparison of Relational Database Management Systems
Comparison of Relational Database Management Systems
management systems
From Wikipedia, the free encyclopedia
The following tables compare general and technical information for a number of relational
database management systems. Please see the individual products' articles for further
information. Unless otherwise specified in footnotes, comparisons are based on the stable
versions without any add-ons, extensions or external programs.
Contents
[hide]
1 General information
2 Operating system support
3 Fundamental features
4 Limits
5 Tables and views
6 Indices
7 Database capabilities
8 Data types
9 Other objects
10 Partitioning
11 Access control
12 Databases vs schemas (terminology)
13 See also
14 References
15 External links
General information[edit]
First
Latest Latest
public
Maintainer stable release License
release
version date
date
2014-07-
4D (4th Dimension) 4D S.A.S.[1] 1984 v14.2 Proprietary
10
2014-04-
Altibase Altibase Corp. 2000 6.1.3 Proprietary
18
2014-04-
Apache Derby Apache 2004 10.10.2.0[2] Apache License
15
2013-10-
Clustrix Clustrix 2010 v5.2 Proprietary
16
NHN 2013-10-
CUBRID 2008-11 9.2.0 GPL v2 or later
Corporation[3] 24
Early
Datacom CA, Inc. 14[5] 2012[6] Proprietary
70s[4]
2013-04-
DB2 IBM 1983 10.5 Proprietary
23
Empress
Empress Embedded Database 1979 10.20 2010-03 Proprietary
Software Inc[7]
2014-04-
EXASolution EXASOL AG 2004[8] 4.2.8 Proprietary
22
HSQL
2013-10-
HSQLDB Development 2001 2.3.1[12] BSD
08
Group
First
Latest Latest
public
Maintainer stable release License
release
version date
date
2014-03-
Informix Dynamic Server IBM 1980 12.10.xC3 Proprietary
14
Ingres
2010-10-
Ingres Ingres Corp. 1974 Database GPL and Proprietary
12
10
InterBase 2010-09-
InterBase Embarcadero 1984 Proprietary
XE 21
2013-08-
Linter SQL RDBMS RELEX Group 1990 6.x Proprietary
26
The Eigenbase
LucidDB 2007-01 0.9.3 GPL v2
Project[13]
2012-10-
Microsoft Access (JET) Microsoft 1992 15 (2013) Proprietary
02
2007-10-
Microsoft Visual Foxpro Microsoft 1984[15] 9 (2005) Proprietary
11[15]
2014-03-
Microsoft SQL Server Microsoft 1989 2014 (12) Proprietary
18
First
Latest Latest
public
Maintainer stable release License
release
version date
date
Hughes
mSQL 1994 3.9[17] 2011-02 Proprietary
Technologies
Oracle 2014-09-
MySQL 1995-11 5.6.21 GPL v2 or Proprietary
Corporation 23
Nexus
Database 2010-05-
Nexusdb 2003-09 3.04 Proprietary
Systems Pty 08
Ltd[18]
Hewlett- SQL/MX
HP NonStop SQL 1987 Proprietary
Packard 2.3
4.3.1
TigerLogic
Omnis Studio 1982-07 Release 2008-05 Proprietary
Inc[19]
1no
OpenBase
OpenBase SQL 1991 11.0.0 Proprietary
International[20]
Progress
OpenEdge Software 1984 11.0 Proprietary
Corporation
First
Latest Latest
public
Maintainer stable release License
release
version date
date
OpenLink 2013-08-
OpenLink Virtuoso 1998 7.x GPL v2 or Proprietary
Software[21] 05
Oracle 2014-02-
Oracle Rdb 1984 7.3.1.1.1 Proprietary
Corporation 24[22]
Corel
Paradox 1985 11 2003 Proprietary
Corporation[23]
Pervasive
Pervasive PSQL 1982 v11 SP3 2013 Proprietary
Software
PostgreSQL
PostgreSQL Licence
Global 2014-03-
PostgreSQL 1989-06 9.3.4[25] (a liberal Open Source
Development 20
license)[26]
Group[24]
R:BASE
R:Base 1982 9.5 Proprietary
Technologies[27]
2012-06-
RDM Raima Inc.[28] 1984 11.0 Proprietary
29
2012-10-
RDM Server Raima Inc.[29] 1993 8.4 Proprietary
31
2008-03-
ScimoreDB Scimore[31] 2005 3.0 Proprietary
03
2005-04-
SmallSQL SmallSQL 0.20 2008-12 LGPL
16
UNICOM 2014-04-
solidDB 1992 7.0.0.10 Proprietary
Global 29
2010-07-
SQL Anywhere Sybase 1992 12.0 Proprietary
09
Scientific
Superbase Superbase 1984 Proprietary
(2004)
Rocket
UniData 1988 7.2.12 2011-10 Proprietary
Software
OS
Windows Linux BSD UNIX AmigaOS
X
Yes
DB2 Yes (Express Yes No Yes No
C)
EXASolution No No Yes No No No
Yes
InterBase Yes Yes Yes No No
(Solaris)
Oracle Rdb No No No No No No
Yes
Pervasive PSQL Yes (OEM Yes No No No
only)
R:Base Yes No No No No No
ScimoreDB Yes No No No No No
Fundamental features[edit]
Information about what fundamental RDBMS features are implemented natively.
Referential
ACID Transactions Fine-grai
integrity
LucidDB Yes No No
Yes2 except
MariaDB Yes2 Partial3 Yes (Row
forDDL[38]
Yes2 except
MySQL Yes2 Partial3 Yes (Row
forDDL[38]
Yes except
Oracle Yes Yes Yes (Row
forDDL[38]
Yes (optimis
Polyhedra DBMS Yes Yes Yes
cell-lev
Referential
ACID Transactions Fine-gr
integrity
Note (1): Currently only supports read uncommited transaction isolation. Version 1.9 adds
serializable isolation and version 2.0 will be fully ACID compliant.
Note (2): MySQL provides ACID compliance through the default InnoDB storage engine.[46][47]
Note (3): "For other [than InnoDB] storage engines, MySQL Server parses and ignores the
FOREIGN KEY and REFERENCES syntax in CREATE TABLE statements. The CHECK clause
is parsed but ignored by all storage engines."[48]
Note (4): Support for Unicode is new in version 10.0.
Note (5): MySQL provides GUI interface through MySQL Workbench.
Limits[edit]
Information about data size limits.
Max Max
Max Max Max columns per Max
table Blob/Clob
DB size row size row si
size size
200 GB 20
4th Dimension Limited ? ? 65,135
(2 GiBUnicode) (2 GiB
65,135 / (10+
Advantage Database Server Unlimited 16 EiB 65,530 B 4 GiB
AvgFieldNameLength)
2,147,483,647
Apache Derby Unlimited Unlimited Unlimited 1,012 (5,000 in views) ( VA
chars
32
64 MB on
Appliance,
Clustrix Unlimited Unlimited ? 64 MB 6
4 MB on
AWS
4 GB (longtext,
Drizzle Unlimited 64 TB 8 KB 1,000 64 K
longblob)
Max DB Max table Max row Max columns per Max Blob/Clob Max
size size size row size
32,765 bytes
(exclusive
Informix Dynamic Server ~128 PB ~128 PB 32,765 4 TB 3
of large
objects)
64 KB (w/o
BLOBs),
Linter SQL RDBMS Unlimited 230 rows 250 4 GB 4
4 GB
(BLOB)
Max Max
Max Max Max columns per Max
table Blob/Clob
DB size row size row si
size size
MyISAM
storage
limits:
256 TB;
Innodb
4 GB (longtext,
MariaDB 10 Unlimited storage 64 KB3 4,0964 64 K
longblob)
limits:
64 TB;
Aria
storage
limits: ???
64 KB (memo
field), 1 GB 255
Microsoft Access(JET) 2 GB 2 GB 16 MB 255
("OLE Object" f
field)
524,272 TB
(32 767
8,060 bytes
Microsoft SQL Server files * 524,272 TB 30,000 2 GB 2
(Unlimited)6
16 TB max
file size)
MyISAM
storage
limits:
256 TB; 4 GB (longtext,
MySQL 5 Unlimited 64 KB3 4,0964 64 K
Innodb longblob)
storage
limits:
64 TB
Max Max
Max Max Max columns per Max
table Blob/Clob
DB size row size row si
size size
32 TB per
instance
DB size (or
OpenLink Virtuoso (Unlimited 4 KB 200 2 GB 2
32 TB)
via elastic
cluster)
Unlimited 4 GB *
(4 GB * block size
Oracle block size (with 8 KB 1,000 128 TB 32,
per BIGFILE
tablespace) tablespace)
Max DB Max table Max row Max columns per Max Blob/Clob Max
size size size row size
4 billion
Pervasive PSQL 256 GB 2 GB 1,536 2 GB 8,00
objects
Limited by
available
4 GB (subject to 4 GB
Polyhedra RAM, 232 rows Unlimited 65,536
RAM) to
address
space
1 GB (text,
bytea)[50] - stored
250–1600 depending
PostgreSQL Unlimited 32 TB 1.6 TB inline or 4 TB 1
on type
(stored in
pg_largeobject)[51]
cha
RDM Embedded Unlimited 248-1 rows 32 KB 1,000 4 GB
varch
32 KB +
solidDB 256 TB 256 TB Limited by row size 4 GB 4
BLOB data
104 TB (13
files, each
Limited by Limited by
SQL Anywhere file up to 45,000 2 GB 2
file size file size
8 TB (32
KB pages))
128 TB
(231pages * Limited by Limited by
SQLite 32,767 2 GB 2
64 KB max file size file size
page size)
64 KB
wo/lobs
Teradata Unlimited Unlimited 2,048 2 GB 1
(64 GB
w/lobs)
Max DB Max table Max row Max columns per Max Blob/Clob Max
size size size row size
Note (1): Firebird 2.x maximum database size is effectively unlimited with the largest known
database size >980 GB.[52] Firebird 1.5.x maximum database size: 32 TB.
Note (2): Limit is 1038 using DECIMAL datatype.[53]
Note (3): InnoDB is limited to 8,000 bytes (excluding VARBINARY , VARCHAR , BLOB ,
or TEXT columns).[54]
Note (4): InnoDB is limited to 1,000 columns.[54]
Note (6): Using VARCHAR (MAX) in SQL 2005 and later.[55]
Note (7): When using a page size of 32 KB, and when BLOB/CLOB data is stored in the
database file.
Note (8): Java array size limit of 2,147,483,648 (231) objects per array applies. This limit applies
to number of characters in names, rows per table, columns per table, and characters
per CHAR / VARCHAR .
Note (9): Despite the lack of a date datatype, SQLite does include date and time
functions,[56] which work for timestamps between 0000-01-01 00:00:00 and 5352-11-01 10:52:47.
Note (10): Informix DATETIME type has adjustable range from YEAR only through 1/10000th
second. DATETIME date range is 0001-01-01 00:00:00.00000 through 9999-12-31
23:59:59.99999.
Note (11): Since version 12c. Earlier versions support up to 4000 B.
Temporary table
ADABAS ?
Altibase Yes
Clustrix Yes
CUBRID No
Drizzle Yes
DB2 Yes
EXASolution Yes
Firebird Yes
HSQLDB Yes
H2 Yes
Ingres Yes
InterBase Yes
LucidDB No
MariaDB Yes
MaxDB Yes
MonetDB Yes
MySQL Yes
Oracle Yes
Polyhedra DBMS No
PostgreSQL Yes
solidDB Yes
ScimoreDB No
SQLite Yes
Temporary table
Teradata Yes
UniData Yes
UniVerse Yes
Note (1): Server provides tempdb, which can be used for public and private (for the session)
temp tables.[57]
Note (2): Materialized views are not supported in Informix; the term is used in IBM's
documentation to refer to a temporary table created to run the view's query when it is too
complex, but one cannot for example define the way it is refreshed or build an index on it. The
term is defined in the Informix Performance Guide.[58]
Note (4): Materialized views can be emulated using stored procedures and triggers.[59]
Note (5): Materialized views are now standard but can be emulated in versions prior to 9.3 with
stored procedures and triggers using PL/pgSQL, PL/Perl, PL/Python, or other procedural
languages.[60]
Indices[edit]
Information about what indices (other than basic B-/B+ tree indices) are supported natively.
R-
/R+ Hash Expression Partial Reverse Bit
tree
ADABAS ? ? ? ? ?
Apache Derby No No No No No
Clustrix No Yes No No No
R-
/R+ Hash Expression Partial Reverse Bit
tree
Drizzle No No No No No
EXASolution No Yes No No No
HSQLDB No No No No No
H2 No Yes No No No
InterBase No No No No No
LucidDB No No No No No
MEMORY, PERSISTENT
MyISAM
Cluster (NDB), virtual
MariaDB tables No No
InnoDB,5 tables columns
only
only only [69]
R-
/R+ Hash Expression Partial Reverse Bit
tree
MaxDB No No No No No
Non/Cluster &
Microsoft SQL Server ? Yes3 Yes4 No3
fill factor
MonetDB No Yes No No No
MEMORY,
MyISAM
Cluster (NDB),
MySQL tables No[77] No No
InnoDB,5 tables
only
only
Pervasive PSQL No No No No No
R-
/R+ Hash Expression Partial Reverse Bit
tree
ScimoreDB No No No No No
solidDB No No No No Yes
SQL Anywhere No No No No No
R-/R+
Hash Expression Partial Reverse B
tree
Note (1): The users need to use a function from freeAdhocUDF library or similar.[90]
Note (2): Can be implemented for most data types using expression-based indexes.
Note (3): Can be emulated by indexing a computed column[91] (doesn't easily update) or by using
an "Indexed View"[92] (proper name not just any view works[93]).
Note (4): Can be implemented by using an indexed view.[94]
Note (5): InnoDB automatically generates adaptive hash index[95] entries as needed.
Note (6): Can be implemented using Function-based Indexes in Oracle 8i and higher, but the
function needs to be used in the sql for the index to be used.
Note (7): A PostgreSQL functional index can be used to reverse the order of a field.
Note (8): PostgreSQL will likely support on-disk bitmap indexes in a future version. Version 8.2
supports a related technique known as "in-memory bitmap scans".
Note (10): B+ tree and full-text only for now.
Note (11): R-Tree indexing available in base edition with Locator but some functionality requires
Personal Edition or Enterprise Edition with Spatial option.
Database capabilities[edit]
ADABAS Yes ? ? ? ? ? ?
Yes, via
Altibase Yes Yes Yes Yes Yes Yes
MINUS
Empress Embedded Database Yes Yes Yes Yes Yes Yes Yes
Yes, via
Informix Dynamic Server Yes Yes Yes Yes Yes Yes
MINUS
Linter SQL RDBMS Yes Yes Yes Yes Yes Yes Yes
Yes (2005
Yes (2005
Microsoft SQL Server Yes and Yes Yes Yes Yes
and beyond)
beyond)
Yes, via
Oracle Yes Yes Yes Yes Yes Yes
MINUS
LEFT
ScimoreDB Yes ? ? Yes Yes Yes
only
SmallSQL ? ? ? ? ? ? ?
LEFT
SQLite Yes Yes Yes Yes Yes No
only
Note (1): Recursive CTEs introduced in 11gR2 supersedes similar construct called CONNECT
BY.
Data types[edit]
Ty
pe Floati Bo
Integ Binar Date/
sys ng Decimal String ole Other
er y Time
te point an
m
UUID
(16-bit),
SMALL
DURATI
INT (16-
ON,
4th bit), INT CLOB, BIT, BIT BOO
REAL, REAL, INTERV
Dimen Static (32-bit), TEXT, VARYIN LEA PICTURE
FLOAT FLOAT AL,
sion BIGINT VARCHAR G, BLOB N
TIMEST
(64-bit),
AMP
NUME
RIC (64-
bit)
SMALL
CHAR, BLOB,
INT (16- REAL(3 DECIMAL,
VARCHAR, BYTE,
Altibas bit), 2-bit), NUMERIC, GEOMET
Static NCHAR, NIBBLE, DATE
e[109] INTEG DOUBL NUMBER, RY
NVARCHA BIT,
ER (32- E(64-bit) FLOAT
R, CLOB VARBIT
bit),
BIGINT
Ty
pe Floati Bo
Integ Binar Date/
sys ng Decimal String ole Other
er y Time
te point an
m
(64-bit)
TINYIN
T (8-
bit), CHAR,
SMALL BINARY, TINYBL
DATETI
INT (16- VARCHAR, OB, BIT(1
FLOAT ME,
bit), VARBINAR BLOB, ),
Clustri (32-bit), DATE, ENUM,
Static MEDIU DECIMAL Y, TEXT, MEDIU BOO
x[110] DOUBL TIMEST SET,
MINT TINYTEXT, MBLOB, LEA
E AMP,
(24-bit), MEDIUMTE LONGBL N
YEAR
INT (32- XT, OB
bit), LONGTEXT
BIGINT
(64-bit)
MONET
SMALL
ARY, BIT
INT (16- DATE,
FLOAT, CHAR, VARYIN
bit), DATETI
REAL(3 VARCHAR, G, SET,
CUBR INTEG DECIMAL, ME,
Static 2-bit), NCHAR, BLOB BIT MULTIS
ID[111] ER (32- NUMERIC TIME,
DOUBL NVARCHA ET,
bit), TIMEST
E(64-bit) R, CLOB SEQUEN
BIGINT AMP
CE,
(64-bit)
ENUM
DATETI
INT (32- DOUBL BINARY,
ME,
Drizzle Static bit), E (aka VARCHAR, ENUM,
[112] DECIMAL BLOB DATE,
BIGINT REAL) VARBINAR SERIAL
TIMEST
(64-bit) (64-bit) Y, TEXT,
AMP
INTEG FLOAT6 R
ER16; 4; VARYING,
INTEG FLOAT, NLSCHARA
ER, or CTER,
INT, SQL_FL CHARACTE
SQL_IN OAT; R LARGE
TEGER, EFLOAT OBJECT,
or TEXT,
INTEG NATIONAL
ER32; CHARACTE
BIGINT R LARGE
, OBJECT,
SQL_BI NLSTEXT
GINT,
or
INTEG
ER64
CHAR,
TINYIN NCHAR,
T, VARCHAR,
DATE, BOO
SMALL REAL, DECIMAL, VARCHAR2
TIMEST LEA
EXAS INT, FLOAT, DEC, , GEOMET
Static N/A AMP, N,
olution INTEG DOUBL NUMERIC, NVARCHA RY
INTERV BOO
ER, E NUMBER R,
AL L
BIGINT NVARCHA
, R2, CLOB,
NCLOB
TINYIN
T (8-
BINARY
bit),
, DATE, OTHER
SMALL
CHAR, VARBIN TIME, (object),
INT (16- BOO
HSQL DOUBL DECIMAL, VARCHAR, ARY, TIMEST BIT, BIT
Static bit), LEA
DB[113] E (64-bit) NUMERIC LONGVARC LONGV AMP, VARYIN
INTEG N
HAR, CLOB ARBINA INTERV G,
ER (32-
RY, AL ARRAY
bit),
BLOB
BIGINT
(64-bit)
TINYIN MONEY,
DATE,
T (8- C, CHAR, OBJECT_
ANSIDA
bit), VARCHAR, BYTE, KEY,
TE,
SMALL LONG VARBY TABLE_
FLOAT4 INGRES
INT (16- VARCHAR, TE, KEY,
Ingres [ (32-bit), DATE,
115] Static bit), DECIMAL NCHAR, LONG N/A USER-
FLOAT TIME,
INTEG NVARCHA VARBY DEFINE
(64-bit) TIMEST
ER (32- R, LONG TE D DATA
AMP,
bit), NVARCHA (BLOB) TYPES
INTERV
BIGINT R, TEXT (via
AL
(64-bit) OME)
SMALL
INT (16-
CHAR,
Linter bit), REAL(3 BYTE,
VARCHAR, BOO GEOMET
SQL INTEG 2-bit), DECIMAL, VARBY
Static NCHAR, DATE LEA RY,
RDBM ER (32- DOUBL NUMERIC TE,
NVARCHA N EXTFILE
S bit), E(64-bit) BLOB
R, BLOB
BIGINT
(64-bit)
CURSOR,
DATE,
TIMEST
DATETI
AMP,
MEOFFS
BINARY HIERAR
TINYIN CHAR, ET,
Micros , CHYID,
T, NUMERIC, VARCHAR, DATETI
oft VARBIN UNIQUEI
SMALL FLOAT, DECIMAL, TEXT, ME2,
SQL Static ARY, BIT DENTIFI
INT, REAL SMALLMON NCHAR, SMALL
Server[ IMAGE, ER,
116] INT, EY, MONEY NVARCHA DATETI
FILESTR SQL_VA
BIGINT R, NTEXT ME,
EAM RIANT,
DATETI
XML,
ME,
TABLE,
TIME
Geometry,
Geograph
Ty
pe Floati Bo
Integ Binar Date/
sys ng Decimal String ole Other
er y Time
te point an
m
TIMEST
Micros
AMP,
oft
ROWVE
SQL TINYIN
BINARY RSION,
Server T,
NUMERIC, NCHAR, , UNIQUEI
Compa SMALL FLOAT, DATETI
Static DECIMAL, NVARCHA VARBIN BIT DENTIFI
ct INT, REAL ME
MONEY R, NTEXT ARY, ER,
(Embe INT,
IMAGE IDENTIT
dded BIGINT
Y,
Databa
ROWGUI
se)[117]
DCOL
TIME
WITH
TIME
ZONE
TINYIN DATE, TIMEST
T, FLOAT, TIME, AMP
VARCHAR(
Monet SMALL REAL, NUMERIC, DATETI WITH
Static n),CHAR(n), BLOB BIT
DB INT, DOUBL DECIMAL ME, TIME
CLOB
INT, E TIMEST ZONE,
BIGINT AMP DAY,
MONTH,
YEAR,
INTERV
AL
ENUM,
TINYIN BIT(1 SET, GIS
T (8- ), data types
bit), CHAR, BOO (Geometr
SMALL BINARY, TINYBL LEA y, Point,
FLOAT DATETI
INT (16- VARCHAR, OB, N Curve,
(32-bit), ME,
bit), VARBINAR BLOB, (aka LineStrin
MySQ DOUBL DATE,
Static MEDIU DECIMAL Y, TEXT, MEDIU BOO g,
L[110] E (aka TIMEST
MINT TINYTEXT, MBLOB, L) = Surface,
REAL) AMP,
(24-bit), MEDIUMTE LONGBL synon Polygon,
(64-bit) YEAR
INT (32- XT, OB ym Geometry
bit), LONGTEXT for Collection
BIGINT TINY ,
(64-bit) INT MultiPoin
t,
MultiCurv
Ty
pe Floati Bo
Integ Binar Date/
sys ng Decimal String ole Other
er y Time
te point an
m
e,
MultiLine
String,
MultiSurf
ace,
MultiPoly
gon)
DECIMAL, CHARACTE
DECIMAL'('I R,
REAL, GEOMET
NTNUM')', CHAR'('INT
DOUBL RY,
DECIMAL'('I NUM')', TIMEST
INT, E REFERE
OpenL Static NTNUM','INT VARCHAR, AMP,
INTEG PRECISI NCE
ink + NUM')', VARCHAR'( DATETI
ER, ON, BLOB n/a (URI),
Virtuo Dyna NUMERIC, 'INTNUM')', ME,
SMALL FLOAT, UDT
so[118] mic NUMERIC'('I NVARCHA TIME,
INT FLOAT'(' (User
NTNUM')', R, DATE
INTNU Defined
NUMERIC'('I NVARCHA
M')' Type)
NTNUM','INT R'('INTNUM'
NUM')' )'
Static DATE,
CHAR,
+ BLOB, TIMEST SPATIAL
BINARY VARCHAR2
Dyna RAW, AMP , IMAGE,
_FLOAT , CLOB,
mic LONG (with/wit AUDIO,
Oracle[ (throu NUMB ,
NUMBER
NCLOB,
RAW hout N/A VIDEO,
119]
ER BINARY NVARCHA
gh (deprecat TIMEZO DICOM,
_DOUB R2, NCHAR,
ANY ed), NE), XMLTyp
LE LONG
DAT BFILE INTERV e
(deprecated)
A) AL
BIGINT
CURREN
, DECIMAL,
CY,
INTEG NUMERIC,
IDENTIT
ER, BFLOAT NUMERICSA, BINARY
Y,
SMALL 4, NUMERICSL ,
Pervas CHAR, DATE, SMALLI
INT, BFLOAT B, LONGV
ive LONGVARC DATETI DENTIT
Static TINYIN 8, NUMERICSL ARBINA BIT
PSQL[1 HAR, ME, Y,
20] T, DOUBL S, RY,
VARCHAR TIME TIMEST
UBIGIN E, NUMERICST VARBIN
AMP,
T, FLOAT B, ARY
UNIQUEI
UINTE NUMERICST
DENTIFI
GER, S
ER
USMAL
LINT,
Ty
pe Floati Bo
Integ Binar Date/
sys ng Decimal String ole Other
er y Time
te point an
m
UTINYI
NT
INTEG
ER8 (8-
bit),
FLOAT3 VARCHAR,
INTEG LARGE
2 (32- LARGE
ER(16- BINARY
bit), VARCHAR BOO
Polyhe bit), (aka DATETI
Static FLOAT N/A (aka LEA N/A
dra[121] INTEG BINARY ME
(aka CHARACTE N
ER (32- LARGE
REAL; R LARGE
bit), OBJECT)
64-bit) OBJECT)
INTEG
ER64
(64-bit)
ENUM,
POINT,
LINE,
DATE, LSEG,
TIME BOX,
(with/wit PATH,
SMALL hout POLYGO
REAL
INT (16- TIMEZO N,
(32-bit),
bit), NE), CIRCLE,
Postgr DOUBL CHAR, BOO
INTEG DECIMAL, TIMEST CIDR,
eSQL[1 Static ER (32- E
NUMERIC
VARCHAR, BYTEA
AMP
LEA
INET,
22]
PRECISI TEXT N
bit), (with/wit MACAD
ON (64-
BIGINT hout DR, BIT,
bit)
(64-bit) TIMEZO UUID,
NE), XML,
INTERV JSON,
AL arrays,
composite
s, ranges,
custom
char, varchar,
tinyint, wchar, binary, date,
RDM real,
smallint, varwchar, varbinary time,
Embed Static float, N/A bit N/A
integer, long varchar, , long timestam
ded[123] double
bigint long varbinary p
varwchar
Ty
pe Floati Bo
Integ Binar Date/
sys ng Decimal String ole Other
er y Time
te point an
m
char, varchar,
tinyint, wchar, binary, date,
RDM real,
smallint, decimal, varwchar, varbinary time,
Server[ Static integer, float,
numeric long varchar, , long timestam
bit rowid
124]
double
bigint long varbinary p
varwchar
TINYIN
T (8- CHAR,
bit), REAL VARCHAR, BINARY
SMALL (32-bit), LONG ,
DATE,
INT (16- DOUBL DECIMAL, VARCHAR, VARBIN
solidD TIME,
Static bit), E (64- NUMERIC WCHAR, ARY,
B TIMEST
INTEG bit), (51 digits) WVARCHA LONG
AMP
ER (32- FLOAT R, LONG VARBIN
bit), (64-bit) WVARCHA ARY
BIGINT R
(64-bit)
REAL
(aka
INTEG TEXT (aka
SQLite Dyna FLOAT,
[125] ER (64- N/A CHAR, BLOB N/A N/A N/A
mic DOUBL
bit) CLOB)
E) (64-
bit)
UniDat Dyna
N/A N/A N/A N/A N/A N/A N/A N/A
a mic
UniVe Dyna
N/A N/A N/A N/A N/A N/A N/A N/A
rse mic
Type
Floating Date/Tim Boole
syste Integer Decimal String Binary Other
point e an
m
Other objects[edit]
Information about what other objects are supported natively.
Data Domain Cursor Trigger Function
Empress Embedded Database Yes via RANGE CHECK Yes Yes Yes
Microsoft SQL Server Yes (2000 and beyond) Yes Yes Yes
MySQL No 3
Yes Yes Yes
ScimoreDB No No No No
SQLite No No Yes No
Note (1): Both function and procedure refer to internal routines written in SQL and/or
procedural language like PL/SQL. External routine refers to the one written in the host
languages, such as C, Java, Cobol, etc. "Stored procedure" is a commonly used term for these
routine types. However, its definition varies between different database vendors.
Note (2): In Derby, H2, LucidDB, and CUBRID, users code functions and procedures in Java.
Note (3): ENUM datatype exist. CHECK clause is parsed, but not enforced in runtime.
Note (4): In Drizzle the user codes functions and procedures in C++.
Note (5): Informix supports external functions written in Java, C, & C++.
Partitioning[edit]
Information about what partitioning methods are supported natively.
4th Dimension ? ? ?
ADABAS ? ? ?
Apache Derby No No No
Clustrix Yes No No
EXASolution No Yes No
Firebird No No No
Range Hash Composite (Range
HSQLDB No No No
H2 No No No
InterBase No No No
MaxDB No No No
MonetDB No No No
OpenBase SQL ? ? ?
Pervasive PSQL No No No
Polyhedra DBMS No No No
RDM Server No No No
ScimoreDB No Yes No
solidDB Yes No No
SQL Anywhere No No No
SQLite No No No
Note (1): PostgreSQL 8.1 provides partitioning support through check constraints. Range, List
and Hash methods can be emulated with PL/pgSQL or other procedural languages.[126]
Note (2): RDM Embedded 10.1 requires the application programs to select the correct partition
(using range, hash or composite techniques) when adding data, but the database
union functionality allows all partitions to be read as a single database.[127]
Access control[edit]
Information about access control functionalities (work in progress).
Yes (with
4D ? Yes ? Yes Yes
SSL)
Partial
(need to
Yes (optional; register;
Adaptive Server Enterprise Yes Yes (optional ?) Yes Yes
to pay) depend on
which
product)[128]
Yes (LDAP,
DB2 Yes ? Yes ? Yes
Kerberos…)
Yes (Microsoft
Microsoft SQL Server Yes ? Active Yes Yes Yes
Directory)
No (not
Microsoft SQL Server
relevant, only No (not No (not
Compact (Embedded No (not relevant) Yes Yes (file ac
file relevant) relevant)
Database)
permissions)
Yes (Open
OpenBase SQL Yes ? Directory, No ? ?
LDAP)
Yes
OpenLink Virtuoso Yes Yes Yes Yes (optional) Yes
(optional)
Optional)
No (not
Partial (no
relevant, only No (not No (not
SQLite No (not relevant) security Yes (file ac
file relevant) relevant)
page)[133]
permissions)
Note (1): Network traffic could be transmitted in a secure way (not clear-text, in general SSL
encryption). Precise if option is default, included option or an extra modules to buy.
Note (2): Options are present to set a minimum size for password, respect complexity like
presence of numbers or special characters.
Note (3): How do you get security updates? Is it free access, do you need a login or to pay? Is
there easy access through a Web/FTP portal or RSS feed or only through offline access (mail
CD-ROM, phone).
Note (4): Does database process run as root/administrator or unprivileged user? What is default
configuration?
Note (5): Is there a separate user to manage special operation like backup (only dump/restore
permissions), security officer (audit), administrator (add user/create database), etc.? Is it default
or optional?
Note (6): Common Criteria certified product list.[134]
Note (7): FirebirdSQL seems to only have SYSDBA user and DB owner. There are no separate
roles for backup operator and security administrator.
Note (8): User can define a dedicated backup user but nothing particular in default install.[135]
Note (9): Authentication methods.[136]
Note (10): Informix Dynamic Server supports PAM and other configurable authentication. By
default uses OS authentication.
Note (11): Authentication methods.[137]
Note (12): With the use of Pervasive AuditMaster.
Note (13): User-based security is optional in Polyhedra, but when enabled can be enhanced to a
role-based model with auditing.[138]
The SQL specification makes clear what an "SQL schema" is; however, different databases
implement it incorrectly. To compound this confusion the functionality can, when incorrectly
implemented, overlap with that of the parent-database. An SQL schema is simply
a namespace within a database, things within this namespace are addressed using the
member operator dot " . ". This seems to be a universal amongst all of the implementations.
A true fully (database, schema, and table) qualified query is exemplified as such: SELECT *
FROM database.schema.table
Now, the issue, both a schema and a database can be used to isolate one table, "foo" from
another like named table "foo". The following is pseudo code:
SELECT * FROM db1.foo vs. SELECT * FROM db2.foo (no explicit schema between db
and table)
SELECT * FROM [db1.]default.foo vs. SELECT * FROM [db1.]alternate.foo (no
explicit db prefix)
The problem that arises is that former MySQL users will create multiple databases for one
project. In this context, MySQL databases are analogous in function to Postgres-schemas,
insomuch as Postgres lacks off-the-shelf cross-database functionality that MySQL has.
Conversely, PostgreSQL has applied more of the specification implementing cross-table, cross-
schema, and then left room for future cross-database functionality.
MySQL aliases schema with database behind the scenes, such that CREATE
SCHEMA and CREATE DATABASE are analogs. It can therefore be said that MySQL has
implemented cross-database functionality, skipped schema functionality entirely, and provided
similar functionality into their implementation of a database. In summary, Postgres fully supports
schemas but lacks some functionality MySQL has with databases, while MySQL does not even
attempt to support true schemas.
Oracle has its own spin where creating a user is synonymous with creating a schema. Thus a
database administrator can create a user called PROJECT and then create a table
PROJECT.TABLE. Users can exist without schema objects, but an object is always associated
with an owner (though that owner may not have privileges to connect to the database). With the
Oracle 'shared-everything' RAC architecture, the same database can be opened by multiple
servers concurrently. This is independent of replication, which can also be used, whereby the
data is copied for use by different server. In the Oracle view, the 'database' is a set of files which
contains the data while the 'instance' is a set of processes (and memory) through which a
database is accessed.
Informix supports multiple databases in a server instance, like MySQL. It supports the CREATE
SCHEMA syntax as a way to group DDL statements into a single unit creating all objects created
as a part of the schema as a single owner. Informix supports a database mode called ANSI
mode which supports creating objects with the same name but owned by different users.
The end result is confusion between the database factions. The Postgres and Oracle
communities maintain that one database is all that is needed for one project, per the definition of
database. MySQL and Informix proponents maintain that schemas have no legitimate purpose
when the functionality can be achieved with databases. Postgres adheres to the SQL
specification, in a more intuitive fashion (bottom-up), while MySQL's pragmatic counterargument
allows their users to get the job done while creating conceptual confusion.