Comparison of relational database management systems


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.

Operating system support

The operating systems that the RDBMSes can run on.
WindowsmacOSLinuxBSDUNIXAmigaOSz/OSOpenVMSiOSAndroid
4th Dimension
ADABAS
Adaptive Server Enterprise
Advantage Database Server
Altibase
Apache Derby
ClustrixDB
CockroachDB
CUBRID
IBM Db2
Empress Embedded Database
EXASolution
FileMaker
Firebird
HSQLDB
H2
Informix Dynamic Server
Ingres
InterBase
Linter [SQL RDBMS]Under Linux on IBM Z
LucidDB
MariaDB
MaxDB
Microsoft Access
Microsoft Visual Foxpro
Microsoft SQL Server
Microsoft SQL Server Compact (Embedded Database)
Mimer SQL
MonetDB
MySQL
Omnis Studio
OpenEdge
OpenLink Virtuoso
Oracle
Oracle Rdb
Actian Zen (PSQL)
Polyhedra
PostgreSQL Under Linux on IBM Z
R:Base
SAP HANA
solidDBUnder Linux on IBM Z
SQL Anywhere
SQLBase
SQLite
SQream DB
Superbase
Superbase NG
Teradata
TiDB
UniData
UniVerse
YugabyteDB
WindowsmacOSLinuxBSDUNIXAmigaOSz/OSOpenVMSiOSAndroid

Fundamental features

Information about what fundamental RDBMS features are implemented natively.
Database NameACIDReferential integrityTransactionsFine-grained lockingMultiversion concurrency controlUnicodeInterfaceType inference
4th DimensionGUI & SQL
ADABASproprietary direct call & SQL
Adaptive Server Enterprise API & GUI & SQL
Advantage Database Server 4API & SQL
Altibase API & GUI & SQL
Apache Derby SQL
ClustrixDBSQL
CockroachDB SQL
CUBRID GUI & SQL
IBM Db2 GUI & SQL
Empress Embedded DatabaseAPI & SQL
EXASolutionAPI & GUI & SQL
FirebirdAPI & SQL
HSQLDBSQL
H2SQL
Informix Dynamic Server SQL, REST, MQ, and JSON
Ingres SQL & QUEL
InterBaseSQL
Linter SQL RDBMS API & GUI & SQL
LucidDBSQL
MariaDB22 except for DDL SQL
MaxDBSQL
Microsoft Access GUI & SQL
Microsoft Visual FoxPro GUI & SQL
Microsoft SQL Server GUI & SQL
Microsoft SQL Server Compact (Embedded Database)GUI & SQL
Mimer SQL API & GUI & SQL
MonetDBAPI & SQL & MAL
MySQL232 except for DDL GUI 5 & SQL
OpenEdge6 GUI & SQL
OpenLink VirtuosoAPI & GUI & SQL
Oracle except for DDL API & GUI & SQL
Oracle RdbSQL
Actian Zen (PSQL)API & GUI & SQL
Polyhedra DBMS API & SQL
PostgreSQL API & GUI & SQL
SAP HANA API & GUI & SQL
solidDB API & SQL
SQL Anywhere API & GUI & HTTP(S) & SQL
SQLBaseAPI & GUI & SQL
SQLite API & SQL
Superbase NG GUI & Proprietary & ODBC
Teradata SQL
TiDB except for DDL GUI 5 & SQL
UniDataMultiple
UniVerseMultiple
Database NameACIDReferential integrityTransactionsFine-grained lockingMultiversion concurrency controlUnicodeInterfaceType inference
Note (1): Currently only supports read uncommitted transaction isolation. Version [|1].[|9] adds serializable isolation and version [|2].0 will be fully ACID compliant.Note (2): MariaDB and MySQL provide ACID compliance through the default InnoDB storage engine.Note (3): "For other than InnoDB storage engines, MySQL Server parses and ignores the and syntax in statements." "The clause supports most core features for all storage engines."Note (4): Support for Unicode is new in version [|10].0.Note (5): MySQL provides GUI interface through MySQL Workbench.6 back|Note (6):] OpenEdge SQL database engine uses Referential Integrity, OpenEdge ABL Database engine does not and is handled via database triggers.

Limits

Information about data size limits.
Max DB sizeMax table sizeMax row sizeMax columns per rowMax Blob/Clob sizeMax CHAR sizeMax NUMBER sizeMin DATE valueMax DATE valueMax column name size
4th DimensionLimited65,135200 GB 200 GB 64 bits
Advantage Database ServerUnlimited16 EiB65,135 / [|4] GiB64 bits128
Apache DerbyUnlimitedUnlimitedUnlimited1,012 2,147,483,647 chars254 64 bits0001-01-019999-12-31128
ClustrixDBUnlimitedUnlimited64 MB on Appliance, 4 MB on AWS64 MB64 MB64 MB0001-01-019999-12-31254
CUBRID2 EB2 EBUnlimitedUnlimitedUnlimited1 GB64 bits0001-01-019999-12-31254
IBM DB2Unlimited1,01264 bits0001-01-019999-12-31128
Empress Embedded DatabaseUnlimited263−1 bytes2 GB32,7672 GB2 GB64 bits0000-01-019999-12-3132
EXASolutionUnlimitedUnlimitedUnlimited10,0002 MB128 bits0001-01-019999-12-31256
FileMaker[|8] TB8 TB8 TB256,000,0004 GB10,000,0001 billion characters, to, ±0001-01-014000-12-31100
FirebirdUnlimited1≈32 TB65,536 BDepends on data types used32 GB32,767 B128 bits1003276863
HSQLDB64 TBUnlimited8Unlimited8Unlimited864 TB7Unlimited8Unlimited80001-01-019999-12-31128
H264 TBUnlimited8Unlimited8Unlimited864 TB7Unlimited864 bits-9999999999999999Unlimited8
Max DB sizeMax table sizeMax row sizeMax columns per rowMax Blob/Clob sizeMax CHAR sizeMax NUMBER sizeMin DATE valueMax DATE valueMax column name size
Informix Dynamic Server≈0.[|5] YB12≈0,5YB1232,765 bytes 32,7654 TB32,7651410125 1301/01/00011012/31/9999128 bytes
IngresUnlimitedUnlimited256 KB1,0242 GB32 000 B64 bits00019999256
InterBaseUnlimited1≈32 TB65,536 BDepends on data types used2 GB32,767 B64 bits1003276831
Linter SQL RDBMSUnlimited230 rows64 KB,
2GB
2502 GB4000 B64 bits0001-01-019999-12-3166
MariaDBUnlimitedMyISAM storage limits: 256 TB;
Innodb storage limits: 64 TB;
Aria storage limits: ???
64 KB34,09644 GB 64 KB 64 bits1000999964
Microsoft Access 2 GB2 GB16 MB25564 KB,
1 GB
255 B 32 bits0100999964
Microsoft Visual FoxproUnlimited2 GB65,500 B2552 GB16 MB32 bits0001999910
Microsoft SQL Server524,272 TB
16ZB per instance
524,272 TB8,060 bytes / 2 TB61,024 / 30,0002 GB / Unlimited 2 GB6126 bits200019999128
Microsoft SQL Server Compact (Embedded Database)4 GB4 GB8,060 bytes10242 GB4000154 bits00019999128
Mimer SQLUnlimitedUnlimited16000 252Unlimited1500045 digits0001-01-019999-12-31128
MonetDBUnlimitedUnlimitedUnlimitedUnlimited2 GB2 GB128 bits-4712-01-019999-12-311024
MySQLUnlimitedMyISAM storage limits: 256 TB; Innodb storage limits: 64 TB64 KB34,09644 GB 64 KB 64 bits1000999964
OpenLink Virtuoso32 TB per instance
DB size 4 KB2002 GB2 GB23109999100
Oracle

4 GB × block size
8 KB1,000128 TB32,767 B11126 bits−47129999128
Max DB sizeMax table sizeMax row sizeMax columns per rowMax Blob/Clob sizeMax CHAR sizeMax NUMBER sizeMin DATE valueMax DATE valueMax column name size
Actian Zen (PSQL)4 billion objects256 GB2 GB1,5362 GB8,000 bytes64 bits01-01-000112-31-9999128 bytes
PolyhedraLimited by available RAM, address space232 rowsUnlimited65,5364 GB 4 GB 64 bits0001-01-018000-12-31255
PostgreSQLUnlimited32 TB1.6 TB250–1600 depending on type1 GB stored inline or 4 TB using pg_largeobject1 GBUnlimited−4,7135,874,89763
SAP HANA
solidDB256 TB256 TB32 KB + BLOB dataLimited by row size4 GB4 GB64 bits-32768-01-0132767-12-31254
SQL Anywhere104 TB Limited by file sizeLimited by file size45,0002 GB2 GB64 bits0001-01-019999-12-31128 bytes
SQLite128 TB Limited by file sizeLimited by file size32,7672 GB2 GB64 bitsNo DATE type9No DATE type9Unlimited
TeradataUnlimitedUnlimited64000 wo/lobs
2,0482 GB64,00038 digits0001-01-019999-12-31128
UniVerseUnlimitedUnlimitedUnlimitedUnlimitedUnlimitedUnlimitedUnlimitedUnlimitedUnlimitedUnlimited
Max DB sizeMax table sizeMax row sizeMax columns per rowMax Blob/Clob sizeMax CHAR sizeMax NUMBER sizeMin DATE valueMax DATE valueMax column name size
Note (1): Firebird 2.x maximum database size is effectively unlimited with the largest known database size >980 GB. Firebird 1.5.x maximum database size: 32 TB.Note (2): Limit is 1038 using DECIMAL datatype.Note (3): InnoDB is limited to 8,000 bytes.Note (4): InnoDB is limited to 1,017 columns.Note (6): Using VARCHAR in SQL 2005 and later.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 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, which work for timestamps between 24 November 4714 B.C. and 1 November 5352.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.Note (12): The limit refers to the storage limit of a single Informix server instance beginning with v15.0. Informix v12.10 and later versions support using sharding techniques to distribute a table across multiple server instances. A distributed Informix database has no upper limit on table or database size.Note (13): Informix DECIMAL type supports up to 32 decimal digits of precision with a range of to. Fixed and variable precision are supported.Note (14): The LONGLVARCHAR type supports strings up to 4TB.

Tables and views

Information about what tables and views are supported natively.
Temporary tableMaterialized view
4th Dimension
ADABAS
Adaptive Server Enterprise1 – see precomputed result sets
Advantage Database Server
Altibase
Apache Derby
ClustrixDB
CUBRID
IBM Db2
Empress Embedded Database
EXASolution
Firebird
HSQLDB
H2
Informix Dynamic Server2
Ingres
InterBase
Linter SQL RDBMS
LucidDB
MariaDB4
MaxDB
Microsoft Access
Microsoft Visual Foxpro
Microsoft SQL Server
Microsoft SQL Server Compact (Embedded Database)
Mimer SQL
MonetDB
MySQL4
Oracle
Oracle Rdb
OpenLink Virtuoso
Actian Zen (PSQL)
Polyhedra DBMS
PostgreSQL
SAP HANA
solidDB
SQL Anywhere
SQLite
Superbase
Teradata
UniData
UniVerse
Temporary tableMaterialized view
Note (1): Server provides tempdb, which can be used for public and private temp tables.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.Note (4): Materialized views can be emulated using stored procedures and triggers.

Indexes

Information about what indexes are supported natively.
R-/R+ treeHashExpressionPartialReverseBitmapGiSTGINFull-textSpatialForest of Trees IndexDuplicate index prevention
4th DimensionCluster
ADABAS
Adaptive Server Enterprise
Advantage Database Server
Apache Derby
ClustrixDB
CUBRID
IBM Db2
Empress Embedded Database
EXASolution
Firebird
HSQLDB
H2
Informix Dynamic Server
Ingres
InterBase
Linter SQL RDBMS10 temporary indexes for equality joins for some scalar functions like LOWER and UPPER
LucidDB
MariaDBAria and MyISAM tables and, since v10.2.2, InnoDB tables onlyMEMORY, InnoDB,5 tables onlyPERSISTENT virtual columns onlyAria and MyISAM tables and, since v10.2.2, InnoDB tables only
MaxDB
Microsoft Access
Microsoft Visual Foxpro2
Microsoft SQL ServerSpatial Indexes43on Computed columns3Bitmap filter index for Star Join Query
Microsoft SQL Server Compact (Embedded Database)
Mimer SQL
MonetDB
MySQLSpatial IndexesMEMORY, Cluster, InnoDB,5 tables onlyMyISAM tables and, since v5.6.4, InnoDB tablesMyISAM tables and, since v5.7.5, InnoDB tables
OpenLink VirtuosoCluster
Oracle 11Cluster Tables 6
Oracle Rdb
Actian Zen (PSQL)
Polyhedra DBMS
PostgreSQL7PostGIS
SAP HANA
solidDB
SQL Anywhere
SQLiteSpatiaLite
SQream DB
Teradata
UniVerse333
R-/R+ treeHashExpressionPartialReverseBitmapGiSTGINFull-textSpatialForest of Trees IndexDuplicate index prevention
Note (1): The users need to use a function from freeAdhocUDF library or similar.Note (2): Can be implemented for most data types using expression-based indexes.Note (3): Can be emulated by indexing a computed column or by using an "Indexed View".Note (4): Used for InMemory ColumnStore index, temporary hash index for hash join, Non/Cluster & fill factor.Note (5): InnoDB automatically generates adaptive hash index 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 (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.Note (12): FOT or Forest of Trees indexes is a type of B-tree index consisting of multiple B-trees which reduces contention in multi-user environments.

Database capabilities

Note (1): Recursive CTEs introduced in 11gR2 supersedes similar construct called CONNECT BY.

Data types

Type systemIntegerFloating pointDecimalStringBinaryDate/TimeBooleanOther
4th DimensionStatic,,,, , , ,, ,, ,,
AltibaseStatic,, , ,,, ,,,, ,,,,
ClustrixDBStatic,,,, , ,,,,,,, ,,, ,,, , ,,
CUBRIDStatic,, ,, , ,,,, ,,, ,,,,,
IBM Db2,, ,, ,, ,, ,,, ,,,,
Empress Embedded DatabaseStatic,, or ;,, or ;,,, or ;,, or ,, or ;,, or ;, or ; ,,,, or ; ,,,,,,,,, or ; ,,,,,, 32,
EXASolutionStatic,,,,,, ,,, ,,,,,,, ,, ,
FileMakerStatic
Firebird,,, , ,,, ,,,, , ,, ,,, User defined types
Type systemIntegerFloating pointDecimalStringBinaryDate/TimeBooleanOther
HSQLDBStatic,,, , ,,, ,,, ,,, ,,,
Informix Dynamic ServerStatic + ,,, , , ,,,,,,, ,,, ,, ,,,,,,,,,,
IngresStatic,,, , C,,,,,,, ,, ,,,,, ,,, -
Linter SQL RDBMSStatic + Dynamic ,, , , ,,,, ,, ,
MariaDBStatic,,,, , ,,,,,,, ,,, ,,, , = synonym for ,, data types
Microsoft SQL ServerStatic,,, , ,,, ,,,,, ,,,, ,,,,, ,,,,,,, Geometry, Geography, Custom.NET datatypes
Microsoft SQL Server Compact (Embedded Database)Static,,, , ,, ,, ,, ,,,,
Mimer SQLStatic,,, ,,, , ,,,,, ,, ,,, ,
MonetDBStatic, extensible,,,,,,, ,,,, , ,,,,,,, , ,,,,,,,,,, ,,,,,, data types, User Defined Types
MySQLStatic,,,, , ,,,,,,, ,,, ,,, , = synonym for ,, data types
OpenLink VirtuosoStatic + Dynamic,, ,,, ,,,,, ,,,,, ,,, ,,,
Type systemIntegerFloating pointDecimalStringBinaryDate/TimeBooleanOther
OracleStatic + Dynamic , ,,,,,, ,,, ,, ,,,,, XMLType,,
Actian Zen (PSQL)Static,,,,,,, ,,, ,,,,,, ,, ,, ,, ,,,,
PolyhedraStatic,,, , ,
PostgreSQLStatic,, , , ,, ,,, ,,,,,,,,,,,,,,,, arrays, composites, ranges, custom
SAP HANAStatic,,, ,,,, ,,, ,, ,,, ,,,,,,,,,,,,
solidDBStatic,,, ,, , ,,,,, ,, ,,
SQLiteDynamic
SQream DBStatic,,, , ,, ,
Type systemIntegerFloating pointDecimalStringBinaryDate/TimeBooleanOther
TeradataStatic,,, , ,, ,, ,, ,,,,,
UniDataDynamic
UniVerseDynamic
Type systemIntegerFloating pointDecimalStringBinaryDate/TimeBooleanOther

Other objects

Information about what other objects are supported natively.
Data domainCursorTriggerFunction1Procedure1External routine1
4th Dimension
ADABAS??
Adaptive Server Enterprise
Advantage Database Server
Altibase
Apache Derby222
ClustrixDB
CUBRID2
Empress Embedded Database via RANGE CHECK
EXASolution
IBM Db2 via CHECK CONSTRAINT
Firebird
HSQLDB
H2222
Informix Dynamic Server via CHECK 5
Ingres
InterBase
Linter SQL RDBMS
LucidDB222
MariaDB
MaxDB
Microsoft Access
Microsoft Visual Foxpro
Microsoft SQL Server
Microsoft SQL Server Compact (Embedded Database)
Mimer SQL
MonetDB
MySQL 3
Oracle
Oracle Rdb
OpenLink Virtuoso
Actian Zen (PSQL)
Polyhedra DBMS
PostgreSQL
SAP HANA
solidDB
SQL Anywhere
SQLite
Teradata
UniData
UniVerse
Data domainCursorTriggerFunction1Procedure1External routine1
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 exists. CHECK clause enforced as of 8.0.16.Note (5): Informix supports external functions written in Java, C, & C++.

Partitioning

Information about what partitioning methods are supported natively.
RangeHashComposite ListExpressionRound Robin
4th Dimension
ADABAS
Adaptive Server Enterprise
Advantage Database Server
Altibase
Apache Derby
ClustrixDB
CUBRID
IBM Db2
Empress Embedded Database
EXASolution
Firebird
HSQLDB
H2
Informix Dynamic Server
Ingres
InterBase
Linter SQL RDBMS
MariaDB
MaxDB
Microsoft Access
Microsoft Visual Foxpro
Microsoft SQL Server
Microsoft SQL Server Compact (Embedded Database)
Mimer SQL
MonetDB
MySQL
Oracle
Oracle Rdb
OpenLink Virtuoso
Actian Zen (PSQL)
Polyhedra DBMS
PostgreSQL
SAP HANA
solidDB
SQL Anywhere
SQLite
Teradata
UniVerse
RangeHashComposite ListExpressionRound Robin

Access control

Information about access control functionalities.
Native network encryption1Brute-force protectionEnterprise directory compatibilityPassword complexity rules2Patch access3Run unprivileged4Audit
4D
Adaptive Server Enterprise
Advantage Database Server
CUBRID
IBM Db2
Empress Embedded Database
EXASolution
Firebird 7
HSQLDB
H2
Informix Dynamic Server1010
Linter SQL RDBMS
MariaDB 8
Microsoft SQL Server
Microsoft SQL Server Compact (Embedded Database)
Mimer SQL
MySQL 8
OpenLink Virtuoso
Oracle
Actian Zen (PSQL) 12
Polyhedra DBMS 13 13
PostgreSQL
SAP HANA
solidDB
SQL Anywhere
SQLite
Teradata
Native network encryption1Brute-force protectionEnterprise directory compatibilityPassword complexity rules2Patch access3Run unprivileged4Audit
Note (1): Network traffic could be transmitted in a secure way. 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.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, security officer, administrator, etc.? Is it default or optional?Note (6): Common Criteria certified product list.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.Note (9): Authentication methods.Note (10): Informix Dynamic Server supports PAM and other configurable authentication. By default uses OS authentication.Note (11): Authentication methods.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.

Databases vs schemas (terminology)

The SQL specification defines what an "SQL schema" is; however, databases implement it differently. To compound this confusion the functionality can overlap with that of a 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 among all of the implementations.
A true fully (database, schema, and table) qualified query is exemplified as such:
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:
  • vs.
  • vs.
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 PostgreSQL-schemas, insomuch as PostgreSQL deliberately 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 and 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, PostgreSQL fully supports schemas and multi-tenancy by strictly separating databases from each other and thus lacks some functionality MySQL has with databases, while MySQL does not even attempt to support standard 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. With the 'shared-everything' Oracle 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 servers. In the Oracle implementation, a 'database' is a set of files which contains the data while the 'instance' is a set of processes through which a database is accessed.
Informix supports multiple databases in a server instance like MySQL. It supports the 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.
PostgreSQL and some other databases have support for foreign schemas, which is the ability to import schemas from other servers as defined in ISO/IEC 9075-9. This appears like any other schema in the database according to the SQL specification while accessing data stored either in a different database or a different server instance. The import can be made either as an entire foreign schema or merely certain tables belonging to that foreign schema. While support for ISO/IEC 9075-9 bridges the gap between the two competing philosophies surrounding schemas, MySQL and Informix maintain an implicit association between databases while ISO/IEC 9075-9 requires that any such linkages be explicit in nature.