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.

General information

Operating system support

The operating systems that the RDBMSes can run on.
WindowsmacOSLinuxBSDUNIXAmigaOSz/OSiOSAndroidOpenVMS
4th Dimension
ADABAS
Adaptive Server Enterprise
Advantage Database Server
Altibase
Apache Derby
ClustrixDB
CUBRID
DB2
Empress Embedded Database
EXASolution
FileMaker
Firebird
HSQLDB
H2
Informix Dynamic Server
Ingres
InterBase
Linter SQL RDBMSUnder Linux on IBM Z
LucidDB
MariaDB
MaxDB
Microsoft Access
Microsoft Visual Foxpro
Microsoft SQL Server
Microsoft SQL Server Compact
Mimer SQL
MonetDB
MySQL
Omnis Studio
OpenEdge
OpenLink Virtuoso
Oracle
Oracle Rdb
Pervasive PSQL
Polyhedra
PostgreSQL Under Linux on IBM Z
Raima Database Manager
RDM Server
SAP HANA
solidDBUnder Linux on IBM Z
SQL Anywhere
SQLBase
SQLite
SQream DB
Superbase
Teradata
Tibero
UniData
UniVerse
YugabyteDB
WindowsmacOSLinuxBSDUNIXAmigaOSz/OSiOSAndroidOpenVMS

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 YesAPI & GUI & SQL
Advantage Database Server [|4]API & SQL
Altibase API & GUI & SQL
Apache Derby SQL
ClustrixDBSQL
CUBRID GUI & SQL
DB2 GUI & SQL
Empress Embedded DatabaseAPI & SQL
EXASolutionAPI & GUI & SQL
FirebirdAPI & SQL
HSQLDBSQL
H2SQL
Informix Dynamic Server SQL, REST, and JSON
Ingres SQL & QUEL
InterBaseSQL
Linter SQL RDBMS API & GUI & SQL
LucidDBSQL
MariaDB[|2][|6]2 except for DDL SQL
MaxDBSQL
Microsoft Access GUI & SQL
Microsoft Visual FoxPro GUI & SQL
Microsoft SQL Server GUI & SQL
Microsoft SQL Server Compact GUI & SQL
Mimer SQL API & GUI & SQL
MonetDBAPI & SQL & MAL
MySQL232 except for DDL GUI [|5] & SQL
OpenEdge7 GUI & SQL
OpenLink VirtuosoAPI & GUI & SQL
Oracle except for DDL API & GUI & SQL
Oracle RdbSQL
Pervasive PSQL6API & GUI & SQL
Polyhedra DBMS API & SQL
PostgreSQL API & GUI & SQL
Raima Database ManagerSQL & API
RDM ServerSQL & API
SAP HANA API & GUI & SQL
solidDB API & SQL
SQL Anywhere API & GUI & HTTP & SQL
SQLBaseAPI & GUI & SQL
SQLite API & SQL
Teradata SQL
Tibero API & GUI & SQL
UniDataMultiple
UniVerseMultiple
Database NameACIDReferential integrityTransactionsFine-grained lockingMultiversion concurrency controlUnicodeInterfaceType inference

Note : Currently only supports read uncommited transaction isolation. Version [|1].[|9] adds serializable isolation and version 2.0 will be fully ACID compliant.
Note : MySQL provides ACID compliance through the default InnoDB storage engine.
Note : "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."
Note : Support for Unicode is new in version [|10].0.
Note : MySQL provides GUI interface through MySQL Workbench.
Note : MariaDB's default XtraDB engine is ACID compliant.
Note : 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,530 B65,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
DB2Unlimited2 ZB1,048,319 B1,0122 GB32 KiB64 bits0001-01-019999-12-31128
Empress Embedded DatabaseUnlimited263-1 bytes2 GB32,7672 GB2 GB64 bits0000-01-019999-12-3132
EXASolutionUnlimitedUnlimitedUnlimited10,000N/A2 MB128 bits0001-01-019999-12-31256
FileMaker[|8] TB8 TB8 TB256,000,0004 GB10,000,0001 billion characters, 10^-400 to 10^400, +-0001-01-014000-12-31100
FirebirdUnlimited1~32 TB65,536 BDepends on data types used32 GB32,767 B64 bits1003276831
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~128 PB12~128 PB1232,765 bytes 32,7654 TB32,765103201/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/2TB61,024/30,0002 GB/Unlimited 2 GB6126 bits200019999128
Microsoft SQL Server Compact 4 GB4 GB8,060 bytes10242 GB4000154 bits00019999128
Mimer SQLUnlimitedUnlimited16000252Unlimited1500045 digits0001-01-019999-12-31128
MonetDBUnlimitedUnlimitedUnlimitedUnlimited2 GB2 GB128 bits-9999-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
Oracle2PB
8PB
8EB
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
Pervasive PSQL4 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 1 GBUnlimited−4,7135,874,89763
Raima Database ManagerUnlimited248-1 rows32 KB1,0004 GBchar: 256, varchar: 4 KB64 bits0001-01-0111758978-12-3131
RDM ServerUnlimited264-1 rows32 KB32,768Unlimited32 KB64 bits0001-01-0111758978-12-3132
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 : 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 : Limit is 1038 using DECIMAL datatype.
Note : InnoDB is limited to 8,000 bytes.
Note : InnoDB is limited to 1,017 columns.
Note : Using VARCHAR in SQL 2005 and later.
Note : When using a page size of 32 KB, and when BLOB/CLOB data is stored in the database file.
Note : 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 : 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 : 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 : Since version 12c. Earlier versions support up to 4000 B.
Note : The 128PB limit refers to the storage limit of a single Informix server instance. 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.

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
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
Mimer SQL
MonetDB
MySQL4
Oracle
Oracle Rdb
OpenLink Virtuoso
Pervasive PSQL
Polyhedra DBMS
PostgreSQL5
Raima Database Manager
RDM Server
SAP HANA
solidDB
SQL Anywhere
SQLite
Teradata
UniData
UniVerse
Temporary tableMaterialized view

Note : Server provides tempdb, which can be used for public and private temp tables.
Note : 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 : Materialized views can be emulated using stored procedures and triggers.
Note : Materialized views are now standard.

Indexes

Information about what indexes are supported natively.
R-/R+ treeHashExpressionPartialReverseBitmapGiSTGINFull-textSpatialFOTDuplicate index prevention
4th DimensionCluster
ADABAS
Adaptive Server Enterprise
Advantage Database Server
Apache Derby
ClustrixDB
CUBRID
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
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
Pervasive PSQL
Polyhedra DBMS
PostgreSQL7PostGIS
Raima Database Manager
RDM Server
SAP HANA
solidDB
SQL Anywhere
SQLiteSpatiaLite
SQream DB
Teradata
UniVerse333
R-/R+ treeHashExpressionPartialReverseBitmapGiSTGINFull-textSpatialFOTDuplicate index prevention

Note : The users need to use a function from freeAdhocUDF library or similar.
Note : Can be implemented for most data types using expression-based indexes.
Note : Can be emulated by indexing a computed column or by using an "Indexed View".
Note : Used for InMemory ColumnStore index, temporary hash index for hash join, Non/Cluster & fill factor.
Note : InnoDB automatically generates adaptive hash index entries as needed.
Note : 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 : A PostgreSQL functional index can be used to reverse the order of a field.
Note : B+ tree and full-text only for now.
Note : R-Tree indexing available in base edition with Locator but some functionality requires Personal Edition or Enterprise Edition with Spatial option.

Database capabilities

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

Data types

Other objects

Information about what other objects are supported natively.
Data DomainCursorTriggerFunction 1Procedure 1External routine 1
4th Dimension
ADABAS??
Adaptive Server Enterprise
Advantage Database Server
Altibase
Apache Derby 2 2 2
ClustrixDB
CUBRID 2
Empress Embedded Database via RANGE CHECK
EXASolution
DB2 via CHECK CONSTRAINT
Firebird
HSQLDB
H2 2 2 2
Informix Dynamic Server via CHECK 5
Ingres
InterBase
Linter SQL RDBMS
LucidDB 2 2 2
MariaDB
MaxDB
Microsoft Access
Microsoft Visual Foxpro
Microsoft SQL Server
Microsoft SQL Server Compact
Mimer SQL
MonetDB
MySQL 3
OpenBase SQL
Oracle
Oracle Rdb
OpenLink Virtuoso
Pervasive PSQL
Polyhedra DBMS
PostgreSQL
Raima Database Manager
RDM Server
SAP HANA
solidDB
SQL Anywhere
SQLite
Teradata
UniData
UniVerse
Data DomainCursorTriggerFunction 1Procedure 1External routine 1

Note : 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 : In Derby, H2, LucidDB, and CUBRID, users code functions and procedures in Java.
Note : ENUM datatype exists. CHECK clause is parsed, but not enforced in runtime.
Note : 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
Mimer SQL
MonetDB
MySQL
OpenBase SQL
Oracle
Oracle Rdb
OpenLink Virtuoso
Pervasive PSQL
Polyhedra DBMS
PostgreSQL
Raima Database Manager111
RDM Server
SAP HANA
solidDB
SQL Anywhere
SQLite
Teradata
UniVerse
RangeHashComposite ListExpressionRound Robin

Note : Raima Database Manager 14.0 requires the application programs to select the correct partition when adding data, but the database union functionality allows all partitions to be read as a single database.

Access control

Information about access control functionalities.
Native network encryption1Brute-force protectionEnterprise directory compatibilityPassword complexity rules2Patch access3Run unprivileged4AuditResource limitSeparation of duties 5Security CertificationAttribute-Based Access Control
4D
Adaptive Server Enterprise
Advantage Database Server
DB2
Empress Embedded Database
EXASolution
Firebird 7
HSQLDB
H2
Informix Dynamic Server1010
Linter SQL RDBMS
MariaDB 8
Microsoft SQL Server
Microsoft SQL Server Compact
Mimer SQL
MySQL 8
OpenBase SQL
OpenLink Virtuoso
Oracle
Pervasive PSQL 12
Polyhedra DBMS 13 13
PostgreSQL , with triggers
Raima Database Manager
RDM Server
SAP HANA
solidDB
SQL Anywhere
SQLite
Teradata
Native network encryption1Brute-force protectionEnterprise directory compatibilityPassword complexity rules2Patch access3Run unprivileged4AuditResource limitSeparation of duties 5Security CertificationAttribute-Based Access Control

Note : Network traffic could be transmitted in a secure way. Precise if option is default, included option or an extra modules to buy.
Note : Options are present to set a minimum size for password, respect complexity like presence of numbers or special characters.
Note : 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 : Does database process run as root/administrator or unprivileged user? What is default configuration?
Note : Is there a separate user to manage special operation like backup, security officer, administrator, etc.? Is it default or optional?
Note : Common Criteria certified product list.
Note : FirebirdSQL seems to only have SYSDBA user and DB owner. There are no separate roles for backup operator and security administrator.
Note : User can define a dedicated backup user but nothing particular in default install.
Note : Authentication methods.
Note : Informix Dynamic Server supports PAM and other configurable authentication. By default uses OS authentication.
Note : Authentication methods.
Note : With the use of Pervasive AuditMaster.
Note : 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 qualified query is exemplified as such: SELECT * FROM database.schema.table
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:
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 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, PostgreSQL fully supports schemas but 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 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.
PostgreSQL and some other databases have recently added 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.