Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
The following articles list the incompatibilities and feature differences between MariaDB and MySQL for series that are no longer maintained
MariaDB maintains high levels of compatibility with MySQL, and most applications that use MySQL will work seamlessly with MariaDB. However, take note of the following incompatibilities and feature differences between MariaDB 11.3 and MySQL 8.0. It is based on the versions MySQL 8.0.35 and MariaDB 11.3.1. Note that MySQL 8 is an 'evergreen' release, so features may be added or removed in later releases.
In addition to the standard , , , , , , and storage engines, the following are also available with MariaDB 11.3:
utilizes a massively parallel distributed data architecture and is designed for big data scaling to process petabytes of data.
, a storage engine with great compression
allows one to archive MariaDB tables in Amazon S3, or any third-party public or private cloud that implements S3 API.
, MyISAM replacement with better caching.
(drop-in replacement for Federated)
The most notable , but not in MySQL, are:
is a standard part of MariaDB Server.
in the form of:
(allow you to query and operate on historic data).
(allow you to query and operate on a temporal range of data), including the clause.
When moving from MySQL 8.0 to , please take note of the following incompatibilities:
For a list of function differences, see
For a list of system variable differences, see
MariaDB does not support MySQL's SET PERSIST -
MariaDB's GTID is not compatible with MySQL's. Note that MariaDB and MySQL also have different , so these need to be adjusted when migrating.
For protocol differences, see .
(which combine both system-versioning and application-time periods).
, allowing instances, databases or tables to be rolled back to an old snapshot.
MariaDB supports in a number of additional languages: Bulgarian, Chinese, Georgian, Hindi, Serbian, and Ukrainian.
MariaDB has made major improvements to the optimizer.
support
merged into the server
OR REPLACE syntax for statements, such as , , etc
, ,
syntax for setting the lock wait timeout.
data type for storing UUIDs.
and data types for storing IPv6 and IPv4 addresses.
made more granular.
Multiple
Number of supported decimals in has increased from 30 to 38
Number of parts of an index increased from 16 to 32.
Added catchall for list partitions
Oracle-style statement
Lots of new
MariaDB (506) than MySQL (266).
command to reload SSL certificates without server restart.
IF NOT EXISTS clause added to and IF EXISTS clause added to and
. This makes replication notably faster!
allows one to implement very efficient backups with minimal locking.
Progress reporting for and
gives the EXPLAIN plan for a query running in another thread. MySQL introduced the EXPLAIN FOR CONNECTION syntax to do the same thing.
(including )
and faster calls
MySQL 8 does not support
MySQL 8 does not support the use of as an alias for
The is now default on Unix-like systems, which is a major change to authentication in MariaDB. See for an overview of the changes.
All mysql* binaries are now named mariadb* (the previous mysql named is retained as a symlink for compatibility purposes)
Not all are across both MySQL and MariaDB. As of 11.3, MariaDB supports 40 character sets and 506 collations . As of 8.0.35, MySQL supports 41 character sets (gb18030 being the additional one - MDEV-7495) and 286 collations.
MariaDB indicates collation pad status as part of the name (e.g. utf8mb3_unicode_nopad_ci), while MySQL indicates pad status by means of an extra column in .
To make CREATE TABLE ... SELECT work the same way in statement based and row based replication it's by default executed as on the replica. One benefit of this is that if the replica dies in the middle of CREATE ... SELECT it will be able to continue.
One can use the variable to specify how CREATE TABLE and DROP TABLE is replicated.
Users created with MySQL's SHA256 password algorithm cannot be used in MariaDB 11.3 - MDEV-9804.
MariaDB 11.3 does not support Lateral Derived Tables - MDEV-19078.
MariaDB 11.3 does not support CIDR notation for user accounts - MDEV-25515.
MariaDB stores as true text, not in binary format as MySQL. MariaDB's JSON functions are much faster than MySQL's so there is no need to store in binary format, which would add complexity when manipulating JSON objects.
For the same reason, MariaDB's is an alias for . If you want to replicate JSON columns from MySQL to MariaDB, you should store JSON objects in MySQL in a TEXT or LONGTEXT column or use statement-based replication. If you are using JSON columns and want to upgrade to MariaDB, use the plugin to automatically convert MySQL JSON to TEXT, or alternatively you need to either convert them to TEXT or use to copy these tables to MariaDB.
In MySQL, JSON is compared according to json values. In MariaDB JSON strings are normal strings and compared as strings.
MariaDB 11.3 does not support MySQL's JSON operators (-> and ->>) - MDEV-13594
MariaDB 11.3 supports the standard by producing null and a warning for when given invalid data, while MySQL produces an error.
MariaDB never allows authentication via roles, while MySQL permits this.
MySQL permits activating multiple roles at the same time. MariaDB can achieve the same result by creating an intermediate aggregate role.
In the , MySQL reports just the direct list of enabled roles, while MariaDB reports the enabled role, plus the effective inherited roles.
MySQL extends the .
MySQL includes the tables INFORMATION_SCHEMA.ROLE_TABLE_GRANTS, INFORMATION_SCHEMA.ROLE_ROUTINE_GRANTS, INFORMATION_SCHEMA.ROLE_COLUMN_GRANTS, and INFORMATION_SCHEMA ADMINISTRABLE_ROLE_AUTHORIZATIONS.
MySQL has the enabled by default. For performance reasons MariaDB 11.3 has it disabled by default. You can enable it by starting mariadbd with the option --performance-schema.
MariaDB has removed the .
In MariaDB 11.3, using without any table list will only close tables not in use, and tables not locked by the FLUSH TABLES connection. If there are no locked tables, FLUSH TABLES will be instant and will not cause any waits, as it no longer waits for tables in use. When a table list is provided, the server will wait for the end of any transactions that are using the tables. In MySQL, FLUSH TABLES only waits for the statements to complete.
MariaDB binaries (mariadbd, etc.) give a warning if one uses a unique prefix of an option (such as --big-table instead of --big-tables). MySQL binaries require the full option name.
MariaDB 11.3 implements in a different way to MySQL 8.0.
MySQL's implementation of can only kill SELECTs, while MariaDB's can kill any queries (excluding stored procedures).
MariaDB 11.3 does not support MySQL's SELECT /*+ MAX_EXECUTION_TIME(n) */ ... - see Aborting Statements that Exceed a Certain Time to Execute.
MySQL 8.0 does not support the .
MariaDB 11.3 does not support the MySQL Memcached plugin (which has been deprecated in MySQL 8.0). However, data stored using memcached can be retrieved because the data is stored as InnoDB tables. MariaDB is able to start successfully with an error message of not being able to find libmemcached.so library.
In MySQL, X'HHHH', the standard SQL syntax for binary string literals, erroneously works in the same way as 0xHHHH, which could work as a number or string depending on the context. In MariaDB, this has been fixed to behave as a string in all contexts (and never as a number). See and for more details and examples.
In MariaDB 11.3, does not quote the DEFAULT value of an integer. MariaDB 10.2 and earlier, and MySQL, do. Since MariaDB can support defaults for and fields, while MySQL does not, will also append DEFAULT NULL where no default is explicitly provided to nullable BLOB or TEXT fields in MariaDB.
As a result of implementing , the has been renamed to VALUE().
MariaDB's supports SELECT statements, LOCK TABLES and various DDL statements, while MySQL's NOWAIT only supports SELECT.
MariaDB's cannot be added on and while MySQL's can - MDEV-25247
MariaDB does not support table while it is write-locked - MDEV-30814
MariaDB returns an ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction when unable to lock within the time, while MySQL returns ERROR 3572 (HY000): Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set
MariaDB does not support the optional init_vector argument for and or the block_encryption_mode variable - MDEV-9069
MariaDB does not support the --initialize option. Use instead. - MDEV-19010
MariaDB 11.3 does not support the ngram and MeCab full-text parser plugins - MDEV-10267, MDEV-10268.
MariaDB 11.3 does not support the MySQL X plugin.
MariaDB 11.3 does not support for InnoDB.
The MySQL 8.0 and MariaDB 11.3 table contain slightly different fields.
MariaDB 11.3 client executables allow the connection protocol to be forced by specifying only connection properties on the command-line. See
The MySQL binary log includes the thread_id, while MariaDB's does not - MDEV-7850
The MariaDB syntax supporting Spatial Reference System IDs for spatial data type columns with is not supported by MySQL. MySQL 8 introduced CREATE SPATIAL REFERENCE SYSTEM, which is not supported by MariaDB - MDEV-29953
MariaDB 11.3 does not support the RESTART statement - MDEV-30813
uses a different compression algorithm, and different system variables to manage.
MariaDB 11.3 does not support the SELECT FOR UPDATE and FOR SHARE locks - MDEV-17514
MariaDB maintains high levels of compatibility with MySQL, and most applications that use MySQL will work seamlessly with MariaDB. However, take note of the following incompatibilities and feature differences between MariaDB 11.0 and MySQL 8.0. It is based on the versions MySQL 8.0.34 and MariaDB 11.0.2. Note that MySQL 8 is an 'evergreen' release, so features may be added or removed in later releases.
In addition to the standard , , , , , , and storage engines, the following are also available with MariaDB 11.0:
utilizes a massively parallel distributed data architecture and is designed for big data scaling to process petabytes of data.
, a storage engine with great compression
allows one to archive MariaDB tables in Amazon S3, or any third-party public or private cloud that implements S3 API.
, MyISAM replacement with better caching.
(drop-in replacement for Federated)
The most notable , but not in MySQL, are:
is a standard part of MariaDB Server.
in the form of:
(allow you to query and operate on historic data).
(allow you to query and operate on a temporal range of data), including the clause.
When moving from MySQL 8.0 to , please take note of the following incompatibilities:
For a list of function differences, see
For a list of system variable differences, see
MariaDB does not support MySQL's SET PERSIST -
MariaDB's GTID is not compatible with MySQL's. Note that MariaDB and MySQL also have different , so these need to be adjusted when migrating.
MariaDB maintains high levels of compatibility with MySQL, and most applications that use MySQL will work seamlessly with MariaDB. However, take note of the following incompatibilities and feature differences between MariaDB 11.2 and MySQL 8.0. It is based on the versions MySQL 8.0.35 and MariaDB 11.2.2. Note that MySQL 8 is an 'evergreen' release, so features may be added or removed in later releases.
In addition to the standard , , , , , , and storage engines, the following are also available with MariaDB 11.2:
utilizes a massively parallel distributed data architecture and is designed for big data scaling to process petabytes of data.
, a storage engine with great compression
allows one to archive MariaDB tables in Amazon S3, or any third-party public or private cloud that implements S3 API.
, MyISAM replacement with better caching.
(drop-in replacement for Federated)
The most notable , but not in MySQL, are:
is a standard part of MariaDB Server.
in the form of:
(allow you to query and operate on historic data).
(allow you to query and operate on a temporal range of data), including the clause.
When moving from MySQL 8.0 to , please take note of the following incompatibilities:
For a list of function differences, see
For a list of system variable differences, see
MariaDB does not support MySQL's SET PERSIST -
MariaDB's GTID is not compatible with MySQL's. Note that MariaDB and MySQL also have different , so these need to be adjusted when migrating.
For protocol differences, see .
(which combine both system-versioning and application-time periods).
, allowing instances, databases or tables to be rolled back to an old snapshot.
MariaDB supports in a number of additional languages: Bulgarian, Chinese, Georgian, Hindi, Serbian, and Ukrainian.
MariaDB has made major improvements to the optimizer.
support
merged into the server
OR REPLACE syntax for statements, such as , , etc
, ,
syntax for setting the lock wait timeout.
data type for storing UUIDs.
and data types for storing IPv6 and IPv4 addresses.
made more granular.
Multiple
Number of supported decimals in has increased from 30 to 38
Number of parts of an index increased from 16 to 32.
Added catchall for list partitions
Oracle-style statement
Lots of new
MariaDB (506) than MySQL (266).
command to reload SSL certificates without server restart.
IF NOT EXISTS clause added to and IF EXISTS clause added to and
. This makes replication notably faster!
allows one to implement very efficient backups with minimal locking.
Progress reporting for and
gives the EXPLAIN plan for a query running in another thread. MySQL introduced the EXPLAIN FOR CONNECTION syntax to do the same thing.
(including )
and faster calls
MySQL 8 does not support
MySQL 8 does not support the use of as an alias for
The is now default on Unix-like systems, which is a major change to authentication in MariaDB. See for an overview of the changes.
All mysql* binaries are now named mariadb* (the previous mysql named is retained as a symlink for compatibility purposes)
Not all are across both MySQL and MariaDB. As of 11.0, MariaDB supports 40 character sets and 506 collations . As of 8.0.34, MySQL supports 41 character sets (gb18030 being the additional one - MDEV-7495) and 286 collations.
MariaDB indicates collation pad status as part of the name (e.g. utf8mb3_unicode_nopad_ci), while MySQL indicates pad status by means of an extra column in .
To make CREATE TABLE ... SELECT work the same way in statement based and row based replication it's by default executed as on the slave. One benefit of this is that if the slave dies in the middle of CREATE ... SELECT it will be able to continue.
One can use the variable to specify how CREATE TABLE and DROP TABLE is replicated.
Users created with MySQL's SHA256 password algorithm cannot be used in MariaDB 11.0 - MDEV-9804.
MariaDB 11.0 does not support Lateral Derived Tables - MDEV-19078.
MariaDB 11.0 does not support CIDR notation for user accounts - MDEV-25515.
MariaDB stores as true text, not in binary format as MySQL. MariaDB's JSON functions are much faster than MySQL's so there is no need to store in binary format, which would add complexity when manipulating JSON objects.
For the same reason, MariaDB's is an alias for . If you want to replicate JSON columns from MySQL to MariaDB, you should store JSON objects in MySQL in a TEXT or LONGTEXT column or use statement-based replication. If you are using JSON columns and want to upgrade to MariaDB, use the plugin to automatically convert MySQL JSON to TEXT, or alternatively you need to either convert them to TEXT or use to copy these tables to MariaDB.
In MySQL, JSON is compared according to json values. In MariaDB JSON strings are normal strings and compared as strings.
MariaDB 11.0 does not support MySQL's JSON operators (-> and ->>) - MDEV-13594
MariaDB 11.0 supports the standard by producing null and a warning for when given invalid data, while MySQL produces an error.
MariaDB never allows authentication via roles, while MySQL permits this.
MySQL permits activating multiple roles at the same time. MariaDB can achieve the same result by creating an intermediate aggregate role.
In the , MySQL reports just the direct list of enabled roles, while MariaDB reports the enabled role, plus the effective inherited roles.
MySQL extends the .
MySQL includes the tables INFORMATION_SCHEMA.ROLE_TABLE_GRANTS, INFORMATION_SCHEMA.ROLE_ROUTINE_GRANTS, INFORMATION_SCHEMA.ROLE_COLUMN_GRANTS, and INFORMATION_SCHEMA ADMINISTRABLE_ROLE_AUTHORIZATIONS.
MySQL has the enabled by default. For performance reasons MariaDB 11.0 has it disabled by default. You can enable it by starting mariadbd with the option --performance-schema.
MariaDB has removed the .
In MariaDB 11.0, using without any table list will only close tables not in use, and tables not locked by the FLUSH TABLES connection. If there are no locked tables, FLUSH TABLES will be instant and will not cause any waits, as it no longer waits for tables in use. When a table list is provided, the server will wait for the end of any transactions that are using the tables. In MySQL, FLUSH TABLES only waits for the statements to complete.
MariaDB binaries (mariadbd, etc.) give a warning if one uses a unique prefix of an option (such as --big-table instead of --big-tables). MySQL binaries require the full option name.
MariaDB 11.0 implements in a different way to MySQL 8.0.
MySQL's implementation of can only kill SELECTs, while MariaDB's can kill any queries (excluding stored procedures).
MariaDB 11.0 does not support MySQL's SELECT /*+ MAX_EXECUTION_TIME(n) */ ... - see Aborting Statements that Exceed a Certain Time to Execute.
MySQL 8.0 does not support the .
MariaDB 11.0 does not support the MySQL Memcached plugin (which has been deprecated in MySQL 8.0). However, data stored using memcached can be retrieved because the data is stored as InnoDB tables. MariaDB is able to start successfully with an error message of not being able to find libmemcached.so library.
In MySQL, X'HHHH', the standard SQL syntax for binary string literals, erroneously works in the same way as 0xHHHH, which could work as a number or string depending on the context. In MariaDB, this has been fixed to behave as a string in all contexts (and never as a number). See and for more details and examples.
In MariaDB 11.0, does not quote the DEFAULT value of an integer. MariaDB 10.2 and earlier, and MySQL, do. Since MariaDB can support defaults for and fields, while MySQL does not, will also append DEFAULT NULL where no default is explicitly provided to nullable BLOB or TEXT fields in MariaDB.
As a result of implementing , the has been renamed to VALUE().
MariaDB's supports SELECT statements, LOCK TABLES and various DDL statements, while MySQL's NOWAIT only supports SELECT.
MariaDB's cannot be added on and while MySQL's can - MDEV-25247
MariaDB does not support table while it is write-locked - MDEV-30814
MariaDB returns an ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction when unable to lock within the time, while MySQL returns ERROR 3572 (HY000): Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set
MariaDB does not support the optional init_vector argument for and or the block_encryption_mode variable - MDEV-9069
MariaDB does not support the --initialize option. Use instead. - MDEV-19010
MariaDB 11.0 does not support the ngram and MeCab full-text parser plugins - MDEV-10267, MDEV-10268.
MariaDB 11.0 does not support the MySQL X plugin.
MariaDB 11.0 before MariaDB 11.0.3 does not support MySQL 8's “native” InnoDB partitioning handler - MDEV-29253
MariaDB 11.0 does not support for InnoDB.
The MySQL 8.0 and MariaDB 11.0 table contain slightly different fields.
MariaDB 11.0 client executables allow the connection protocol to be forced by specifying only connection properties on the command-line. See
The MySQL binary log includes the thread_id, while MariaDB's does not - MDEV-7850
The MariaDB syntax supporting Spatial Reference System IDs for spatial data type columns with is not supported by MySQL. MySQL 8 introduced CREATE SPATIAL REFERENCE SYSTEM, which is not supported by MariaDB - MDEV-29953
MariaDB 11.0 does not support the RESTART statement - MDEV-30813
uses a different compression algorithm, and different system variables to manage.
MariaDB 11.0 does not support the SELECT FOR UPDATE and FOR SHARE locks - MDEV-17514
(which combine both system-versioning and application-time periods).
, allowing instances, databases or tables to be rolled back to an old snapshot.
MariaDB supports in a number of additional languages: Bulgarian, Chinese, Georgian, Hindi, Serbian, and Ukrainian.
MariaDB has made major improvements to the optimizer.
support
merged into the server
OR REPLACE syntax for statements, such as , , etc
, ,
syntax for setting the lock wait timeout.
data type for storing UUIDs.
and data types for storing IPv6 and IPv4 addresses.
made more granular.
Multiple
Number of supported decimals in has increased from 30 to 38
Number of parts of an index increased from 16 to 32.
Added catchall for list partitions
Oracle-style statement
Lots of new
MariaDB (506) than MySQL (266).
command to reload SSL certificates without server restart.
IF NOT EXISTS clause added to and IF EXISTS clause added to and
. This makes replication notably faster!
allows one to implement very efficient backups with minimal locking.
Progress reporting for and
gives the EXPLAIN plan for a query running in another thread. MySQL introduced the EXPLAIN FOR CONNECTION syntax to do the same thing.
(including )
and faster calls
MySQL 8 does not support
MySQL 8 does not support the use of as an alias for
The is now default on Unix-like systems, which is a major change to authentication in MariaDB. See for an overview of the changes.
All mysql* binaries are now named mariadb* (the previous mysql named is retained as a symlink for compatibility purposes)
Not all are across both MySQL and MariaDB. As of 11.2, MariaDB supports 40 character sets and 506 collations . As of 8.0.35, MySQL supports 41 character sets (gb18030 being the additional one - MDEV-7495) and 286 collations.
MariaDB indicates collation pad status as part of the name (e.g. utf8mb3_unicode_nopad_ci), while MySQL indicates pad status by means of an extra column in .
To make CREATE TABLE ... SELECT work the same way in statement based and row based replication it's by default executed as on the replica. One benefit of this is that if the replica dies in the middle of CREATE ... SELECT it will be able to continue.
One can use the variable to specify how CREATE TABLE and DROP TABLE is replicated.
Users created with MySQL's SHA256 password algorithm cannot be used in MariaDB 11.2 - MDEV-9804.
MariaDB 11.2 does not support Lateral Derived Tables - MDEV-19078.
MariaDB 11.2 does not support CIDR notation for user accounts - MDEV-25515.
MariaDB stores as true text, not in binary format as MySQL. MariaDB's JSON functions are much faster than MySQL's so there is no need to store in binary format, which would add complexity when manipulating JSON objects.
For the same reason, MariaDB's is an alias for . If you want to replicate JSON columns from MySQL to MariaDB, you should store JSON objects in MySQL in a TEXT or LONGTEXT column or use statement-based replication. If you are using JSON columns and want to upgrade to MariaDB, use the plugin to automatically convert MySQL JSON to TEXT, or alternatively you need to either convert them to TEXT or use to copy these tables to MariaDB.
In MySQL, JSON is compared according to json values. In MariaDB JSON strings are normal strings and compared as strings.
MariaDB 11.2 does not support MySQL's JSON operators (-> and ->>) - MDEV-13594
MariaDB 11.2 supports the standard by producing null and a warning for when given invalid data, while MySQL produces an error.
MariaDB never allows authentication via roles, while MySQL permits this.
MySQL permits activating multiple roles at the same time. MariaDB can achieve the same result by creating an intermediate aggregate role.
In the , MySQL reports just the direct list of enabled roles, while MariaDB reports the enabled role, plus the effective inherited roles.
MySQL extends the .
MySQL includes the tables INFORMATION_SCHEMA.ROLE_TABLE_GRANTS, INFORMATION_SCHEMA.ROLE_ROUTINE_GRANTS, INFORMATION_SCHEMA.ROLE_COLUMN_GRANTS, and INFORMATION_SCHEMA ADMINISTRABLE_ROLE_AUTHORIZATIONS.
MySQL has the enabled by default. For performance reasons MariaDB 11.2 has it disabled by default. You can enable it by starting mariadbd with the option --performance-schema.
MariaDB has removed the .
In MariaDB 11.2, using without any table list will only close tables not in use, and tables not locked by the FLUSH TABLES connection. If there are no locked tables, FLUSH TABLES will be instant and will not cause any waits, as it no longer waits for tables in use. When a table list is provided, the server will wait for the end of any transactions that are using the tables. In MySQL, FLUSH TABLES only waits for the statements to complete.
MariaDB binaries (mariadbd, etc.) give a warning if one uses a unique prefix of an option (such as --big-table instead of --big-tables). MySQL binaries require the full option name.
MariaDB 11.2 implements in a different way to MySQL 8.0.
MySQL's implementation of can only kill SELECTs, while MariaDB's can kill any queries (excluding stored procedures).
MariaDB 11.2 does not support MySQL's SELECT /*+ MAX_EXECUTION_TIME(n) */ ... - see Aborting Statements that Exceed a Certain Time to Execute.
MySQL 8.0 does not support the .
MariaDB 11.2 does not support the MySQL Memcached plugin (which has been deprecated in MySQL 8.0). However, data stored using memcached can be retrieved because the data is stored as InnoDB tables. MariaDB is able to start successfully with an error message of not being able to find libmemcached.so library.
In MySQL, X'HHHH', the standard SQL syntax for binary string literals, erroneously works in the same way as 0xHHHH, which could work as a number or string depending on the context. In MariaDB, this has been fixed to behave as a string in all contexts (and never as a number). See and for more details and examples.
In MariaDB 11.2, does not quote the DEFAULT value of an integer. MariaDB 10.2 and earlier, and MySQL, do. Since MariaDB can support defaults for and fields, while MySQL does not, will also append DEFAULT NULL where no default is explicitly provided to nullable BLOB or TEXT fields in MariaDB.
As a result of implementing , the has been renamed to VALUE().
MariaDB's supports SELECT statements, LOCK TABLES and various DDL statements, while MySQL's NOWAIT only supports SELECT.
MariaDB's cannot be added on and while MySQL's can - MDEV-25247
MariaDB does not support table while it is write-locked - MDEV-30814
MariaDB returns an ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction when unable to lock within the time, while MySQL returns ERROR 3572 (HY000): Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set
MariaDB does not support the optional init_vector argument for and or the block_encryption_mode variable - MDEV-9069
MariaDB does not support the --initialize option. Use instead. - MDEV-19010
MariaDB 11.2 does not support the ngram and MeCab full-text parser plugins - MDEV-10267, MDEV-10268.
MariaDB 11.2 does not support the MySQL X plugin.
MariaDB 11.2 does not support for InnoDB.
The MySQL 8.0 and MariaDB 11.2 table contain slightly different fields.
MariaDB 11.2 client executables allow the connection protocol to be forced by specifying only connection properties on the command-line. See
The MySQL binary log includes the thread_id, while MariaDB's does not - MDEV-7850
The MariaDB syntax supporting Spatial Reference System IDs for spatial data type columns with is not supported by MySQL. MySQL 8 introduced CREATE SPATIAL REFERENCE SYSTEM, which is not supported by MariaDB - MDEV-29953
MariaDB 11.2 does not support the RESTART statement - MDEV-30813
uses a different compression algorithm, and different system variables to manage.
MariaDB 11.2 does not support the SELECT FOR UPDATE and FOR SHARE locks - MDEV-17514
MariaDB maintains high levels of compatibility with MySQL, and most applications that use MySQL will work seamlessly with MariaDB. However, take note of the following incompatibilities and feature differences between MariaDB 11.1 and MySQL 8.0. It is based on the versions MySQL 8.0.34 and MariaDB 11.1.2. Note that MySQL 8 is an 'evergreen' release, so features may be added or removed in later releases.
In addition to the standard , , , , , , and storage engines, the following are also available with MariaDB 11.1:
utilizes a massively parallel distributed data architecture and is designed for big data scaling to process petabytes of data.
, a storage engine with great compression
allows one to archive MariaDB tables in Amazon S3, or any third-party public or private cloud that implements S3 API.
, MyISAM replacement with better caching.
(drop-in replacement for Federated)
The most notable , but not in MySQL, are:
is a standard part of MariaDB Server.
in the form of:
(allow you to query and operate on historic data).
(allow you to query and operate on a temporal range of data), including the clause.
When moving from MySQL 8.0 to , please take note of the following incompatibilities:
For a list of function differences, see
For a list of system variable differences, see
MariaDB does not support MySQL's SET PERSIST -
MariaDB's GTID is not compatible with MySQL's. Note that MariaDB and MySQL also have different , so these need to be adjusted when migrating.
(which combine both system-versioning and application-time periods).
, allowing instances, databases or tables to be rolled back to an old snapshot.
MariaDB supports in a number of additional languages: Bulgarian, Chinese, Georgian, Hindi, Serbian, and Ukrainian.
MariaDB has made major improvements to the optimizer.
support
merged into the server
OR REPLACE syntax for statements, such as , , etc
, ,
syntax for setting the lock wait timeout.
data type for storing UUIDs.
and data types for storing IPv6 and IPv4 addresses.
made more granular.
Multiple
Number of supported decimals in has increased from 30 to 38
Number of parts of an index increased from 16 to 32.
Added catchall for list partitions
Oracle-style statement
Lots of new
MariaDB (506) than MySQL (266).
command to reload SSL certificates without server restart.
IF NOT EXISTS clause added to and IF EXISTS clause added to and
. This makes replication notably faster!
allows one to implement very efficient backups with minimal locking.
Progress reporting for and
gives the EXPLAIN plan for a query running in another thread. MySQL introduced the EXPLAIN FOR CONNECTION syntax to do the same thing.
(including )
and faster calls
MySQL 8 does not support
MySQL 8 does not support the use of as an alias for
The is now default on Unix-like systems, which is a major change to authentication in MariaDB. See for an overview of the changes.
All mysql* binaries are now named mariadb* (the previous mysql named is retained as a symlink for compatibility purposes)
Not all are across both MySQL and MariaDB. As of 11.1, MariaDB supports 40 character sets and 506 collations . As of 8.0.34, MySQL supports 41 character sets (gb18030 being the additional one - MDEV-7495) and 286 collations.
MariaDB indicates collation pad status as part of the name (e.g. utf8mb3_unicode_nopad_ci), while MySQL indicates pad status by means of an extra column in .
To make CREATE TABLE ... SELECT work the same way in statement based and row based replication it's by default executed as on the replica. One benefit of this is that if the replica dies in the middle of CREATE ... SELECT it will be able to continue.
One can use the variable to specify how CREATE TABLE and DROP TABLE is replicated.
Users created with MySQL's SHA256 password algorithm cannot be used in MariaDB 11.1 - MDEV-9804.
MariaDB 11.1 does not support Lateral Derived Tables - MDEV-19078.
MariaDB 11.1 does not support CIDR notation for user accounts - MDEV-25515.
MariaDB stores as true text, not in binary format as MySQL. MariaDB's JSON functions are much faster than MySQL's so there is no need to store in binary format, which would add complexity when manipulating JSON objects.
For the same reason, MariaDB's is an alias for . If you want to replicate JSON columns from MySQL to MariaDB, you should store JSON objects in MySQL in a TEXT or LONGTEXT column or use statement-based replication. If you are using JSON columns and want to upgrade to MariaDB, use the plugin to automatically convert MySQL JSON to TEXT, or alternatively you need to either convert them to TEXT or use to copy these tables to MariaDB.
In MySQL, JSON is compared according to json values. In MariaDB JSON strings are normal strings and compared as strings.
MariaDB 11.1 does not support MySQL's JSON operators (-> and ->>) - MDEV-13594
MariaDB 11.1 supports the standard by producing null and a warning for when given invalid data, while MySQL produces an error.
MariaDB never allows authentication via roles, while MySQL permits this.
MySQL permits activating multiple roles at the same time. MariaDB can achieve the same result by creating an intermediate aggregate role.
In the , MySQL reports just the direct list of enabled roles, while MariaDB reports the enabled role, plus the effective inherited roles.
MySQL extends the .
MySQL includes the tables INFORMATION_SCHEMA.ROLE_TABLE_GRANTS, INFORMATION_SCHEMA.ROLE_ROUTINE_GRANTS, INFORMATION_SCHEMA.ROLE_COLUMN_GRANTS, and INFORMATION_SCHEMA ADMINISTRABLE_ROLE_AUTHORIZATIONS.
MySQL has the enabled by default. For performance reasons MariaDB 11.1 has it disabled by default. You can enable it by starting mariadbd with the option --performance-schema.
MariaDB has removed the .
In MariaDB 11.1, using without any table list will only close tables not in use, and tables not locked by the FLUSH TABLES connection. If there are no locked tables, FLUSH TABLES will be instant and will not cause any waits, as it no longer waits for tables in use. When a table list is provided, the server will wait for the end of any transactions that are using the tables. In MySQL, FLUSH TABLES only waits for the statements to complete.
MariaDB binaries (mariadbd, etc.) give a warning if one uses a unique prefix of an option (such as --big-table instead of --big-tables). MySQL binaries require the full option name.
MariaDB 11.1 implements in a different way to MySQL 8.0.
MySQL's implementation of can only kill SELECTs, while MariaDB's can kill any queries (excluding stored procedures).
MariaDB 11.1 does not support MySQL's SELECT /*+ MAX_EXECUTION_TIME(n) */ ... - see Aborting Statements that Exceed a Certain Time to Execute.
MySQL 8.0 does not support the .
MariaDB 11.1 does not support the MySQL Memcached plugin (which has been deprecated in MySQL 8.0). However, data stored using memcached can be retrieved because the data is stored as InnoDB tables. MariaDB is able to start successfully with an error message of not being able to find libmemcached.so library.
In MySQL, X'HHHH', the standard SQL syntax for binary string literals, erroneously works in the same way as 0xHHHH, which could work as a number or string depending on the context. In MariaDB, this has been fixed to behave as a string in all contexts (and never as a number). See and for more details and examples.
In MariaDB 11.1, does not quote the DEFAULT value of an integer. MariaDB 10.2 and earlier, and MySQL, do. Since MariaDB can support defaults for and fields, while MySQL does not, will also append DEFAULT NULL where no default is explicitly provided to nullable BLOB or TEXT fields in MariaDB.
As a result of implementing , the has been renamed to VALUE().
MariaDB's supports SELECT statements, LOCK TABLES and various DDL statements, while MySQL's NOWAIT only supports SELECT.
MariaDB's cannot be added on and while MySQL's can - MDEV-25247
MariaDB does not support table while it is write-locked - MDEV-30814
MariaDB returns an ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction when unable to lock within the time, while MySQL returns ERROR 3572 (HY000): Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set
MariaDB does not support the optional init_vector argument for and or the block_encryption_mode variable - MDEV-9069
MariaDB does not support the --initialize option. Use instead. - MDEV-19010
MariaDB 11.1 does not support the ngram and MeCab full-text parser plugins - MDEV-10267, MDEV-10268.
MariaDB 11.1 does not support the MySQL X plugin.
MariaDB 11.1 does not support for InnoDB.
The MySQL 8.0 and MariaDB 11.1 table contain slightly different fields.
MariaDB 11.1 client executables allow the connection protocol to be forced by specifying only connection properties on the command-line. See
The MySQL binary log includes the thread_id, while MariaDB's does not - MDEV-7850
The MariaDB syntax supporting Spatial Reference System IDs for spatial data type columns with is not supported by MySQL. MySQL 8 introduced CREATE SPATIAL REFERENCE SYSTEM, which is not supported by MariaDB - MDEV-29953
MariaDB 11.1 does not support the RESTART statement - MDEV-30813
uses a different compression algorithm, and different system variables to manage.
MariaDB 11.1 does not support the SELECT FOR UPDATE and FOR SHARE locks - MDEV-17514
MariaDB maintains high levels of compatibility with MySQL, and most applications that use MySQL will work seamlessly with MariaDB. However, take note of the following incompatibilities and feature differences between MariaDB 10.3 and MySQL 5.7
In addition to the standard , , , , , , and storage engines, the following are also available with MariaDB 10.3:
, a storage engine with great compression
, MyISAM replacement with better caching.
(drop-in replacement for Federated)
Many optimizer enhancements. are more usable. The complete list and a comparison with MySQL is .
Faster and safer replication:. This makes many setups that use replication and lots of updates .
We've added a lot of . If a patch or feature is useful, safe, and stable — we make every effort to include it in MariaDB. The most notable features are:
is a standard part of MariaDB Server.
(also known as AS OF)
, allowing instances, databases or tables to be rolled back to an old snapshot.
When upgrading from MySQL 5.7 to , please take note of the following incompatibilities:
For a list of function differences, see
For a list of system variable differences, see
MariaDB binaries (mysqld, etc.) give a warning if one uses a unique prefix of an option (such as --big-table instead of --big-tables). MySQL binaries require the full option name.
The following is a list of incompatibilities and feature differences between MariaDB 10.2 and MySQL 5.7
In addition to the standard , , , , , , and storage engines, the following are also available with MariaDB 10.2:
, a storage engine with great compression
, MyISAM replacement with better caching.
(drop-in replacement for Federated)
Many optimizer enhancements. are more usable. The complete list and a comparison with MySQL is .
Faster and safer replication:. This makes many setups that use replication and lots of updates .
for Innodb asynchronous IO subsystem on Windows.
for MyISAM. Can speed up MyISAM tables with up to 4x
We've added a lot of . If a patch or feature is useful, safe, and stable — we make every effort to include it in MariaDB. The most notable features are:
is a standard part of MariaDB Server.
Number of supported decimals in has increased from 30 to 38
When upgrading from MySQL 5.7 to , please take note of the following incompatibilities:
For a list of function differences, see
For a list of system variable differences, see
MariaDB binaries (mysqld, etc.) give a warning if one uses a unique prefix of an option (such as --big-table instead of --big-tables). MySQL binaries require the full option name.
for Innodb asynchronous IO subsystem on Windows.
for MyISAM. Can speed up MyISAM tables with up to 4x
for MyISAM and Aria. This can greatly improve shutdown time (from hours to minutes) if you are using a lot of MyISAM/Aria tables with delayed keys.
is faster.
We improved the performance of character set conversions (and removed conversions when they were not really needed). Overall speed improvement is 1-5 % (according to sql-bench) but can be higher for big result sets with all characters between 0x00-0x7f.
allows MariaDB to run with 200,000+ connections and with a notable speed improvement when using many connections.
Lots of speed improvements when a client connects to MariaDB.
There are some improvements to the DBUG code to make its execution faster when debug is compiled in but not used.
Our use of the Aria storage engine enables faster complex queries (queries which normally use disk-based temporary tables). The storage engine is used for internal temporary tables, which should give a speedup when doing complex selects. Aria is usually faster for temporary tables when compared to MyISAM because Aria caches row data in memory and normally doesn't have to write the temporary rows to disk.
The test suite has been extended and faster than before, even though it tests more things.
merged into the server
and .
Number of supported decimals in has increased from 30 to 38
New statement. WITH is a common table expression that allows you to refer to a subquery expression many times in a query.
, including DEFAULT for and
Added catchall for list partitions
Oracle-style statement
Lots of new
. This makes replication notably faster!
The binary log in MariaDB .
Progress reporting for and
Faster joins and subqueries
and faster calls
support
gives the EXPLAIN plan for a query running in another thread. MySQL introduced the EXPLAIN FOR CONNECTION syntax to do the same thing.
(including )
OR REPLACE syntax for statements, such as , , etc.
MariaDB in the DEFAULT clause, while MySQL does not.
MariaDB than MySQL, including NO PAD collations.
MariaDB supports Spatial Reference System IDs for spatial data type columns with .
MariaDB's GTID is not compatible with MySQL's. This means that one can't have MySQL 5.7 as a slave for MariaDB 10.3. However MariaDB 10.3 can be a slave of MySQL 5.7 or any earlier MySQL/MariaDB version. Note that MariaDB and MySQL also have different , so these need to be adjusted when migrating.
To make CREATE TABLE ... SELECT work the same way in statement based and row based replication it's by default executed as on the slave. One benefit of this is that if the slave dies in the middle of CREATE ... SELECT it will be able to continue.
One can use the variable to specify how CREATE TABLE and DROP TABLE is replicated.
MySQL has the enabled by default. For performance reasons MariaDB 10.3 has it disabled by default. You can enable it by starting mysqld with the option --performance-schema.
MySQL 5.7 features a new implementation of the performance_schema and a sys schema wrapper. These are not yet supported in MariaDB.
MariaDB 10.3 implements in a different way to MySQL 5.7.
MariaDB 10.3 does not support for InnoDB.
The OVER, ROWS and RECURSIVE keywords are in MariaDB 10.3, but not in MySQL 5.7. Note that in MySQL 8.0 these are also reserved words.
MariaDB stores as true text, not in binary format as MySQL. MariaDB's JSON functions are much faster than MySQL's so there is no need to store in binary format, which would add complexity when manipulating JSON objects.
For the same reason, MariaDB's is an alias for . If you want to replicate JSON columns from MySQL to MariaDB, you should store JSON objects in MySQL in a TEXT or LONGTEXT column or use statement based replication. If you are using JSON columns and want to upgrade to MariaDB, you need to either convert them to TEXT or use to copy these tables to MariaDB.
In MySQL, JSON is compared according to json values. In MariaDB JSON strings are normal strings and compared as strings.
MariaDB 10.3 does not support MySQL's JSON operators (-> and ->>) (MDEV-13594)
MariaDB 10.3 supports the standard by producing null and a warning for when given invalid data, while MySQL produces an error.
MariaDB 10.3 does not support the ngram and MeCab full-text parser plugins - MDEV-10267, MDEV-10268.
MariaDB 10.3 does not support the MySQL X plugin.
MariaDB 10.3 does not support MySQL 5.7's “native” InnoDB partitioning handler.
MariaDB 10.3 does not support MySQL 5.7's ALTER TABLE...RENAME INDEX statements.
MySQL's implementation of aborting statements that exceed a certain time to execute can only kill SELECTs, while MariaDB's can kill any queries (excluding stored procedures).
MariaDB 10.3 does not support MySQL's SELECT MAX_STATEMENT_TIME = N ... for MySQL older than 5.7.8 or SELECT /*+ MAX_EXECUTION_TIME(n) */ ... for MySQL 5.7.8 and higher - see Aborting Statements that Exceed a Certain Time to Execute.
The MySQL version of is defined in millseconds, not seconds.
MariaDB 10.3 does not support the MySQL Memcached plugin. However, data stored using memcached can be retrieved because the data is stored as InnoDB tables. MariaDB is able to start successfully with an error message of not being able to find libmemcached.so library.
Users created with MySQL's SHA256 password algorithm cannot be used in MariaDB 10.3 - MDEV-9804.
MariaDB 10.3 doesn't support user or (MariaDB 10.4 does)
In MySQL, X'HHHH', the standard SQL syntax for binary string literals, erroneously works in the same way as 0xHHHH, which could work as a number or string depending on the context. In MariaDB, this has been fixed to behave as a string in all contexts (and never as a number). See and for more details and examples.
In MariaDB 10.3, does not quote the DEFAULT value of an integer. Older versions of MariaDB, and MySQL, do. Since MariaDB 10.3 can support defaults for and fields, while MySQL does not, will also append DEFAULT NULL where no default is explicitly provided to nullable BLOB or TEXT fields in MariaDB.
Since MariaDB in the DEFAULT clause, in MariaDB, the table contains extra fields, and also quotes the DEFAULT value of a string in the COLUMN_DEFAULT field in order to distinguish it from an expression.
Since MariaDB supports and , these are both and can't be used as an without being quoted.
As a result of implementing , the has been renamed to VALUE().
MariaDB does not support the optional init_vector argument for and or the block_encryption_mode variable - MDEV-9069
MariaDB does not support the --initialize option. Use instead. - MDEV-19010
Not all are across both MySQL and MariaDB. As of 10.3.24, MariaDB supports 40 character sets and 322 collations. As of 5.7.29, MySQL supports 41 character sets (gb18030 being the additional one) and 222 collations.
The MySQL binary log includes the thread_id, while MariaDB's does not. (MDEV-7850)
for MyISAM and Aria. This can greatly improve shutdown time (from hours to minutes) if you are using a lot of MyISAM/Aria tables with delayed keys.
is faster.
We improved the performance of character set conversions (and removed conversions when they were not really needed). Overall speed improvement is 1-5 % (according to sql-bench) but can be higher for big result sets with all characters between 0x00-0x7f.
allows MariaDB to run with 200,000+ connections and with a notable speed improvement when using many connections.
Lots of speed improvements when a client connects to MariaDB.
There are some improvements to the DBUG code to make its execution faster when debug is compiled in but not used.
Our use of the Aria storage engine enables faster complex queries (queries which normally use disk-based temporary tables). The storage engine is used for internal temporary tables, which should give a speedup when doing complex selects. Aria is usually faster for temporary tables when compared to MyISAM because Aria caches row data in memory and normally doesn't have to write the temporary rows to disk.
The test suite has been extended and faster than before, even though it tests more things.
, allowing instances, databases or tables to be rolled back to an old snapshot.
New statement. WITH is a common table expression that allows you to refer to a subquery expression many times in a query.
, including DEFAULT for and
Added catchall for list partitions
Oracle-style statement
Lots of new
. This makes replication notably faster!
The binary log in MariaDB .
Progress reporting for and
Faster joins and subqueries
and faster calls
support
gives the EXPLAIN plan for a query running in another thread. MySQL introduced the EXPLAIN FOR CONNECTION syntax to do the same thing.
(including )
MariaDB in the DEFAULT clause, while MySQL does not.
MariaDB than MySQL, including NO PAD collations.
MariaDB supports Spatial Reference System IDs for spatial data type columns with .
MariaDB's GTID is not compatible with MySQL's. This means that one can't have MySQL 5.7 as a slave for MariaDB 10.2. However MariaDB 10.2 can be a slave of MySQL 5.7 or any earlier MySQL/MariaDB version. Note that MariaDB and MySQL also have different , so these need to be adjusted when migrating.
To make CREATE TABLE ... SELECT work the same way in statement based and row based replication it's by default executed as on the slave. One benefit of this is that if the slave dies in the middle of CREATE ... SELECT it will be able to continue.
One can use the variable to specify how CREATE TABLE and DROP TABLE is replicated.
MySQL has the enabled by default. For performance reasons MariaDB 10.2 has it disabled by default. You can enable it by starting mysqld with the option --performance-schema.
MariaDB 10.2 implements in a different way to MySQL 5.7.
MariaDB 10.2 does not support for InnoDB.
The OVER, ROWS and RECURSIVE keywords are in MariaDB 10.2, but not in MySQL 5.7. Note that in MySQL 8.0 these are also reserved words.
MariaDB stores as true text, not in binary format as MySQL. MariaDB's JSON functions are much faster than MySQL's so there is no need to store in binary format, which would add complexity when manipulating JSON objects.
For the same reason, MariaDB's is an alias for . If you want to replicate JSON columns from MySQL to MariaDB, you should store JSON objects in MySQL in a TEXT or LONGTEXT column or use statement based replication. If you are using JSON columns and want to upgrade to MariaDB, you need to either convert them to TEXT or use to copy these tables to MariaDB.
In MySQL, JSON is compared according to json values. In MariaDB JSON strings are normal strings and compared as strings.
MariaDB 10.2 does not support MySQL's JSON operators (-> and ->>) (MDEV-13594)
MariaDB 10.2 supports the standard by producing null and a warning for when given invalid data, while MySQL produces an error.
MariaDB 10.2 does not support the ngram and MeCab full-text parser plugins - MDEV-10267, MDEV-10268.
MariaDB 10.2 does not support the MySQL X plugin.
MariaDB 10.2 does not support MySQL 5.7's “native” InnoDB partitioning handler.
MariaDB 10.2 does not support MySQL 5.7's ALTER TABLE...RENAME INDEX statements ().
MySQL's implementation of aborting statements that exceed a certain time to execute can only kill SELECTs, while MariaDB's can kill any queries (excluding stored procedures).
MariaDB 10.2 does not support MySQL's SELECT MAX_STATEMENT_TIME = N ... syntax - see Aborting Statements that Exceed a Certain Time to Execute.
The MySQL version of is defined in millseconds, not seconds.
MariaDB 10.2 does not support the MySQL Memcached plugin. However, data stored using memcached can be retrieved because the data is stored as InnoDB tables. MariaDB is able to start successfully with an error message of not being able to find libmemcached.so library.
Users created with MySQL's SHA256 password algorithm cannot be used in MariaDB 10.2 - MDEV-9804.
MariaDB 10.2 doesn't support user or (MariaDB 10.4 does)
In MySQL, X'HHHH', the standard SQL syntax for binary string literals, erroneously works in the same way as 0xHHHH, which could work as a number or string depending on the context. In MariaDB, this has been fixed to behave as a string in all contexts (and never as a number). See and for more details and examples.
In MariaDB 10.2, does not quote the DEFAULT value of an integer. Older versions of MariaDB, and MySQL, do. Since MariaDB 10.2 can support defaults for and fields, while MySQL does not, will also append DEFAULT NULL where no default is explicitly provided to nullable BLOB or TEXT fields in MariaDB.
Since MariaDB in the DEFAULT clause, in MariaDB, the table contains extra fields, and also quotes the DEFAULT value of a string in the COLUMN_DEFAULT field in order to distinguish it from an expression.
MariaDB does not support the optional init_vector argument for and or the block_encryption_mode variable - MDEV-9069
MariaDB does not support the --initialize option. Use instead. - MDEV-19010
Not all are across both MySQL and MariaDB. As of 10.2.27, MariaDB supports 40 character sets and 322 collations. As of 5.7.29, MySQL supports 41 character sets (gb18030 being the additional one) and 222 collations.
MariaDB maintains high levels of compatibility with MySQL, and most applications that use MySQL will work seamlessly with MariaDB. However, take note of the following incompatibilities and feature differences between MariaDB 10.7 and MySQL 8.0. It is based on the versions MySQL 8.0.25 and MariaDB 10.7.0. Note that MySQL 8 is an 'evergreen' release, so features may be added or removed in later releases.
In addition to the standard , , , , , , and storage engines, the following are also available with MariaDB 107:
utilizes a massively parallel distributed data architecture and is designed for big data scaling to process petabytes of data.
, a storage engine with great compression
allows one to archive MariaDB tables in Amazon S3, or any third-party public or private cloud that implements S3 API.
, MyISAM replacement with better caching.
(drop-in replacement for Federated)
The most notable , but not in MySQL, are:
is a standard part of MariaDB Server.
in the form of:
(allow you to query and operate on historic data).
(allow you to query and operate on a temporal range of data), including the clause.
When moving from MySQL 8.0 to , please take note of the following incompatibilities:
For a list of function differences, see
For a list of system variable differences, see
MariaDB does not support MySQL's SET PERSIST -
MariaDB's GTID is not compatible with MySQL's. Note that MariaDB and MySQL also have different , so these need to be adjusted when migrating.
MariaDB maintains high levels of compatibility with MySQL, and most applications that use MySQL will work seamlessly with MariaDB. However, take note of the following incompatibilities and feature differences between MariaDB 10.8 and MySQL 8.0. It is based on the versions MySQL 8.0.25 and MariaDB 10.8.3. Note that MySQL 8 is an 'evergreen' release, so features may be added or removed in later releases.
In addition to the standard , , , , , , and storage engines, the following are also available with MariaDB 10.8:
utilizes a massively parallel distributed data architecture and is designed for big data scaling to process petabytes of data.
, a storage engine with great compression
allows one to archive MariaDB tables in Amazon S3, or any third-party public or private cloud that implements S3 API.
, MyISAM replacement with better caching.
(drop-in replacement for Federated)
The most notable , but not in MySQL, are:
is a standard part of MariaDB Server.
in the form of:
(allow you to query and operate on historic data).
(allow you to query and operate on a temporal range of data), including the clause.
When moving from MySQL 8.0 to , please take note of the following incompatibilities:
For a list of function differences, see
For a list of system variable differences, see
MariaDB does not support MySQL's SET PERSIST -
MariaDB's GTID is not compatible with MySQL's. Note that MariaDB and MySQL also have different , so these need to be adjusted when migrating.
MariaDB maintains high levels of compatibility with MySQL, and most applications that use MySQL will work seamlessly with MariaDB. However, take note of the following incompatibilities and feature differences between and MySQL 8.0. It is based on the stable versions MySQL 8.0.22 and . Note that MySQL 8 is an 'evergreen' release, so features may be added or removed in later releases.
In addition to the standard , , , , , , and storage engines, the following are also available with :
MariaDB maintains high levels of compatibility with MySQL, and most applications that use MySQL will work seamlessly with MariaDB. However, take note of the following incompatibilities and feature differences between and MySQL 8.0. It is based on the versions MySQL 8.0.32 and . Note that MySQL 8 is an 'evergreen' release, so features may be added or removed in later releases.
In addition to the standard , , , , , , and storage engines, the following are also available with :
(which combine both system-versioning and application-time periods).
, allowing instances, databases or tables to be rolled back to an old snapshot.
support
merged into the server
and
OR REPLACE syntax for statements, such as , , etc
, ,
syntax for setting the lock wait timeout.
data type for storing UUIDs.
data type for storing IPv6 addresses.
made more granular.
Multiple
Number of supported decimals in has increased from 30 to 38
Added catchall for list partitions
Oracle-style statement
Lots of new
MariaDB than MySQL, including NO PAD collations.
command to reload SSL certificates without server restart.
IF NOT EXISTS clause added to and IF EXISTS clause added to and
. This makes replication notably faster!
The binary log in MariaDB .
allows one to implement very efficient backups with minimal locking.
Progress reporting for and
gives the EXPLAIN plan for a query running in another thread. MySQL introduced the EXPLAIN FOR CONNECTION syntax to do the same thing.
(including )
and faster calls
MySQL 8 does not support
MySQL 8 does not support the use of as an alias for
The is now default on Unix-like systems, which is a major change to authentication in MariaDB. See for an overview of the changes.
All mysql* binaries are now named mariadb* (the previous mysql named is retained as a symlink for compatibility purposes)
Not all are across both MySQL and MariaDB. As of 10.7.0, MariaDB supports 40 character sets and 322 collations (armscii8_general_nopad_ci, armscii8_nopad_bin, ascbig5_chinese_nopad_ci, big5_nopad_bin, iicp1250_general_nopad_ci, cp1250_nopad_bin, cp1250_general_nopad_ci, cp1250_nopad_bin, cp1251_general_nopad_ci, cp1251_nopad_bin, cp1256_general_nopad_ci, cp1256_nopad_bin, cp1257_general_nopad_ci, cp1257_nopad_bin, cp850_general_nopad_ci, cp850_nopad_bin, cp852_general_nopad_ci, cp852_nopad_bin, cp866_general_nopad_ci, cp866_nopad_bin, cp932_japanese_nopad_ci, cp932_nopad_bin, dec8_nopad_bin, dec8_swedish_nopad_ci, eucjpms_japanese_nopad_ci, eucjpms_nopad_bin, eucjpms_japanese_nopad_ci, eucjpms_nopad_bin, euckr_korean_nopad_ci, euckr_nopad_bin, gb2312_chinese_nopad_ci, gb2312_nopad_bin, gbk_chinese_nopad_ci, gbk_nopad_bin, geostd8_general_nopad_ci, geostd8_nopad_bin, greek_general_nopad_ci, greek_nopad_bin, hebrew_general_nopad_ci, hebrew_nopad_bin, hp8_english_nopad_ci, hp8_nopad_bin, keybcs2_general_nopad_ci, keybcs2_nopad_bin, koi8r_general_nopad_ci, koi8r_nopad_bin, koi8u_general_nopad_ci, koi8u_nopad_bin, latin1_nopad_bin, latin1_swedish_nopad_ci, latin2_general_nopad_ci, latin2_nopad_bin, latin5_nopad_bin, latin5_turkish_ci, latin5_turkish_nopad_ci, latin7_general_nopad_ci, latin7_nopad_bin, macce_general_nopad_ci, macce_nopad_bin, macroman_general_nopad_ci, macroman_nopad_bin, sjis_japanese_nopad_ci, sjis_nopad_bin, swe7_nopad_bin, tis620_thai_nopad_ci, tis620_nopad_bin, ucs2_croatian_mysql561_ci, ucs2_general_mysql500_ci, ucs2_general_nopad_ci, ucs2_myanmar_ci, ucs2_nopad_bin, ucs2_swedish_ci, ucs2_thai_520_w2, ucs2_unicode_ci, ucs2_unicode_nopad_ci, ujis_japanese_nopad_ci, ujis_nopad_bin, utf16le_general_nopad_ci, utf16le_nopad_bin, utf16_croatian_mysql561_ci, utf16_general_nopad_ci, utf16_myanmar_ci, utf16_nopad_bin, utf16_thai_520_w2, utf16_unicode_520_nopad_ci, utf16_unicode_nopad_ci, utf32_croatian_mysql561_ci, utf32_general_nopad_ci, utf32_myanmar_ci, utf32_nopad_bin, utf32_thai_520_w2, utf32_unicode_520_nopad_ci, utf32_unicode_nopad_ci, utf8mb4_general_nopad_ci, utf8mb4_myanmar_ci, utf8mb4_nopad_bin, utf8mb4_thai_520_w2, utf8mb4_unicode_520_nopad_ci, utf8mb4_unicode_nopad_ci, utf8_croatian_mysql561_ci, utf8_general_nopad_ci, utf8_myanmar_ci, utf8_nopad_bin, utf8_thai_520_w2, utf8_unicode_520_nopad_ci, utf8_unicode_ci and utf8_unicode_nopad_ci being the additional ones). As of 8.0.25, MySQL supports 41 character sets (gb18030 being the additional one - ) and 272 collations (gb18030_bin, gb18030_chinese_ci, gb18030_unicode_520_ci, utf8mb4_0900_ai_ci, utf8mb4_0900_as_ci, utf8mb4_0900_as_cs, utf8mb4_0900_bin, utf8mb4_cs_0900_ai_ci, utf8mb4_cs_0900_as_cs, utf8mb4_da_0900_ai_ci, utf8mb4_da_0900_as_cs, utf8mb4_de_pb_0900_ai_ci, utf8mb4_de_pb_0900_as_cs, utf8mb4_eo_0900_ai_ci, utf8mb4_eo_0900_as_cs, utf8mb4_es_0900_ai_ci, utf8mb4_es_0900_as_cs, utf8mb4_es_trad_0900_ai_ci, utf8mb4_es_trad_0900_as_cs, utf8mb4_et_0900_ai_ci, utf8mb4_et_0900_as_cs, utf8mb4_hr_0900_ai_ci, utf8mb4_hr_0900_as_cs, utf8mb4_hu_0900_ai_ci, utf8mb4_hu_0900_as_cs, utf8mb4_is_0900_ai_ci, utf8mb4_is_0900_as_cs, utf8mb4_ja_0900_as_cs, utf8mb4_ja_0900_as_cs_ks, utf8mb4_la_0900_ai_ci, utf8mb4_la_0900_as_cs, utf8mb4_lt_0900_ai_ci, utf8mb4_lt_0900_as_cs, utf8mb4_lv_0900_ai_ci, utf8mb4_lv_0900_as_cs, utf8mb4_pl_0900_ai_ci, utf8mb4_pl_0900_as_cs, utf8mb4_ro_0900_ai_ci, utf8mb4_ro_0900_as_cs, utf8mb4_ru_0900_ai_ci, utf8mb4_ru_0900_as_cs, utf8mb4_sk_0900_ai_ci, utf8mb4_sk_0900_as_cs, utf8mb4_sl_0900_ai_ci, utf8mb4_sl_0900_as_cs, utf8mb4_sv_0900_ai_ci, utf8mb4_sv_0900_as_cs, utf8mb4_tr_0900_ai_ci, utf8mb4_vi_0900_ai_ci, utf8mb4_vi_0900_as_cs, utf8mb4_zh_0900_as_cs being the additional ones) - .
To make CREATE TABLE ... SELECT work the same way in statement based and row based replication it's by default executed as on the slave. One benefit of this is that if the slave dies in the middle of CREATE ... SELECT it will be able to continue.
One can use the variable to specify how CREATE TABLE and DROP TABLE is replicated.
Users created with MySQL's SHA256 password algorithm cannot be used in MariaDB 10.7 - MDEV-9804.
MariaDB 10.7 does not support Lateral Derived Tables - MDEV-19078.
MariaDB 10.7 does not support CIDR notation for user accounts - MDEV-25515.
MariaDB stores as true text, not in binary format as MySQL. MariaDB's JSON functions are much faster than MySQL's so there is no need to store in binary format, which would add complexity when manipulating JSON objects.
For the same reason, MariaDB's is an alias for . If you want to replicate JSON columns from MySQL to MariaDB, you should store JSON objects in MySQL in a TEXT or LONGTEXT column or use statement based replication. If you are using JSON columns and want to upgrade to MariaDB, you need to either convert them to TEXT or use to copy these tables to MariaDB. See also Making MariaDB understand MySQL JSON.
In MySQL, JSON is compared according to json values. In MariaDB JSON strings are normal strings and compared as strings.
MariaDB 10.7 does not support MySQL's JSON operators (-> and ->>) - MDEV-13594
MariaDB 10.7 supports the standard by producing null and a warning for when given invalid data, while MySQL produces an error.
MariaDB never allows authentication via roles, while MySQL permits this.
MySQL permits activating multiple roles at the same time. MariaDB can achieve the same result by creating an intermediate aggregate role.
In the , MySQL reports just the direct list of enabled roles, while MariaDB reports the enabled role, plus the effective inherited roles.
MySQL extends the .
MySQL includes the tables INFORMATION_SCHEMA.ROLE_TABLE_GRANTS, INFORMATION_SCHEMA.ROLE_ROUTINE_GRANTS, INFORMATION_SCHEMA.ROLE_COLUMN_GRANTS, and INFORMATION_SCHEMA ADMINISTRABLE_ROLE_AUTHORIZATIONS.
MySQL has the enabled by default. For performance reasons MariaDB 10.7 has it disabled by default. You can enable it by starting mariadbd with the option --performance-schema.
In MariaDB 10.7, using without any table list will only close tables not in use, and tables not locked by the FLUSH TABLES connection. If there are no locked tables, FLUSH TABLES will be instant and will not cause any waits, as it no longer waits for tables in use. When a table list is provided, the server will wait for the end of any transactions that are using the tables. In MySQL, FLUSH TABLES only waits for the statements to complete.
MariaDB binaries (mariadbd, etc.) give a warning if one uses a unique prefix of an option (such as --big-table instead of --big-tables). MySQL binaries require the full option name.
MariaDB 10.7 implements in a different way to MySQL 8.0.
MySQL's implementation of aborting statements that exceed a certain time to execute can only kill SELECTs, while MariaDB's can kill any queries (excluding stored procedures).
MariaDB 10.7 does not support MySQL's SELECT /*+ MAX_EXECUTION_TIME(n) */ ... - see Aborting Statements that Exceed a Certain Time to Execute.
MySQL 8.0 does not support the .
MariaDB 10.7 does not support the MySQL Memcached plugin (which has been deprecated in MySQL 8.0). However, data stored using memcached can be retrieved because the data is stored as InnoDB tables. MariaDB is able to start successfully with an error message of not being able to find libmemcached.so library.
In MySQL, X'HHHH', the standard SQL syntax for binary string literals, erroneously works in the same way as 0xHHHH, which could work as a number or string depending on the context. In MariaDB, this has been fixed to behave as a string in all contexts (and never as a number). See and for more details and examples.
In MariaDB 10.7, does not quote the DEFAULT value of an integer. MariaDB 10.2 and earlier, and MySQL, do. Since MariaDB can support defaults for and fields, while MySQL does not, will also append DEFAULT NULL where no default is explicitly provided to nullable BLOB or TEXT fields in MariaDB.
Since MariaDB supports and , these are both and can't be used as an without being quoted.
As a result of implementing , the has been renamed to VALUE().
MariaDB's supports SELECT statements, LOCK TABLES and various DDL statements, while MySQL's NOWAIT only supports SELECT.
MariaDB's cannot be added on and while MySQL's can - MDEV-25247
MariaDB returns an ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction when unable to lock within the time, while MySQL returns ERROR 3572 (HY000): Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set
MariaDB does not support table while it is write-locked - MDEV-30814
MariaDB does not support the optional init_vector argument for and or the block_encryption_mode variable - MDEV-9069
MariaDB does not support the --initialize option. Use instead. - MDEV-19010
MariaDB 10.7 does not support the ngram and MeCab full-text parser plugins - MDEV-10267, MDEV-10268.
MariaDB 10.7 does not support the MySQL X plugin.
MariaDB 10.7 does not support MySQL 8's “native” InnoDB partitioning handler - MDEV-29253
MariaDB 10.7 does not support for InnoDB.
The MySQL 8.0 and MariaDB 10.7 table contain slightly different fields.
MariaDB 10.7 client executables allow the connection protocol to be forced by specifying only connection properties on the command-line. See
The MySQL binary log includes the thread_id, while MariaDB's does not - MDEV-7850
The MariaDB 10.1 syntax supporting Spatial Reference System IDs for spatial data type columns with is not supported by MySQL. MySQL 8 introduced CREATE SPATIAL REFERENCE SYSTEM, which is not supported by MariaDB.
MariaDB 10.7 does not support the RESTART statement - MDEV-30813
MariaDB 10.7 does not support the SELECT FOR UPDATE OF and FOR SHARE OF syntaxes, to only lock rows in the specified tables - MDEV-17514
(which combine both system-versioning and application-time periods).
, allowing instances, databases or tables to be rolled back to an old snapshot.
support
merged into the server
and
OR REPLACE syntax for statements, such as , , etc
, ,
syntax for setting the lock wait timeout.
data type for storing UUIDs.
data type for storing IPv6 addresses.
made more granular.
Multiple
Number of supported decimals in has increased from 30 to 38
Added catchall for list partitions
Oracle-style statement
Lots of new
MariaDB than MySQL, including NO PAD collations.
command to reload SSL certificates without server restart.
IF NOT EXISTS clause added to and IF EXISTS clause added to and
. This makes replication notably faster!
allows one to implement very efficient backups with minimal locking.
Progress reporting for and
gives the EXPLAIN plan for a query running in another thread. MySQL introduced the EXPLAIN FOR CONNECTION syntax to do the same thing.
(including )
and faster calls
MySQL 8 does not support
MySQL 8 does not support the use of as an alias for
The is now default on Unix-like systems, which is a major change to authentication in MariaDB. See for an overview of the changes.
All mysql* binaries are now named mariadb* (the previous mysql named is retained as a symlink for compatibility purposes)
Not all are across both MySQL and MariaDB. As of 10.8.3, MariaDB supports 40 character sets and 322 collations (armscii8_general_nopad_ci, armscii8_nopad_bin, ascbig5_chinese_nopad_ci, big5_nopad_bin, iicp1250_general_nopad_ci, cp1250_nopad_bin, cp1250_general_nopad_ci, cp1250_nopad_bin, cp1251_general_nopad_ci, cp1251_nopad_bin, cp1256_general_nopad_ci, cp1256_nopad_bin, cp1257_general_nopad_ci, cp1257_nopad_bin, cp850_general_nopad_ci, cp850_nopad_bin, cp852_general_nopad_ci, cp852_nopad_bin, cp866_general_nopad_ci, cp866_nopad_bin, cp932_japanese_nopad_ci, cp932_nopad_bin, dec8_nopad_bin, dec8_swedish_nopad_ci, eucjpms_japanese_nopad_ci, eucjpms_nopad_bin, eucjpms_japanese_nopad_ci, eucjpms_nopad_bin, euckr_korean_nopad_ci, euckr_nopad_bin, gb2312_chinese_nopad_ci, gb2312_nopad_bin, gbk_chinese_nopad_ci, gbk_nopad_bin, geostd8_general_nopad_ci, geostd8_nopad_bin, greek_general_nopad_ci, greek_nopad_bin, hebrew_general_nopad_ci, hebrew_nopad_bin, hp8_english_nopad_ci, hp8_nopad_bin, keybcs2_general_nopad_ci, keybcs2_nopad_bin, koi8r_general_nopad_ci, koi8r_nopad_bin, koi8u_general_nopad_ci, koi8u_nopad_bin, latin1_nopad_bin, latin1_swedish_nopad_ci, latin2_general_nopad_ci, latin2_nopad_bin, latin5_nopad_bin, latin5_turkish_ci, latin5_turkish_nopad_ci, latin7_general_nopad_ci, latin7_nopad_bin, macce_general_nopad_ci, macce_nopad_bin, macroman_general_nopad_ci, macroman_nopad_bin, sjis_japanese_nopad_ci, sjis_nopad_bin, swe7_nopad_bin, tis620_thai_nopad_ci, tis620_nopad_bin, ucs2_croatian_mysql561_ci, ucs2_general_mysql500_ci, ucs2_general_nopad_ci, ucs2_myanmar_ci, ucs2_nopad_bin, ucs2_swedish_ci, ucs2_thai_520_w2, ucs2_unicode_ci, ucs2_unicode_nopad_ci, ujis_japanese_nopad_ci, ujis_nopad_bin, utf16le_general_nopad_ci, utf16le_nopad_bin, utf16_croatian_mysql561_ci, utf16_general_nopad_ci, utf16_myanmar_ci, utf16_nopad_bin, utf16_thai_520_w2, utf16_unicode_520_nopad_ci, utf16_unicode_nopad_ci, utf32_croatian_mysql561_ci, utf32_general_nopad_ci, utf32_myanmar_ci, utf32_nopad_bin, utf32_thai_520_w2, utf32_unicode_520_nopad_ci, utf32_unicode_nopad_ci, utf8mb4_general_nopad_ci, utf8mb4_myanmar_ci, utf8mb4_nopad_bin, utf8mb4_thai_520_w2, utf8mb4_unicode_520_nopad_ci, utf8mb4_unicode_nopad_ci, utf8_croatian_mysql561_ci, utf8_general_nopad_ci, utf8_myanmar_ci, utf8_nopad_bin, utf8_thai_520_w2, utf8_unicode_520_nopad_ci, utf8_unicode_ci and utf8_unicode_nopad_ci being the additional ones). As of 8.0.25, MySQL supports 41 character sets (gb18030 being the additional one - ) and 272 collations (gb18030_bin, gb18030_chinese_ci, gb18030_unicode_520_ci, utf8mb4_0900_ai_ci, utf8mb4_0900_as_ci, utf8mb4_0900_as_cs, utf8mb4_0900_bin, utf8mb4_cs_0900_ai_ci, utf8mb4_cs_0900_as_cs, utf8mb4_da_0900_ai_ci, utf8mb4_da_0900_as_cs, utf8mb4_de_pb_0900_ai_ci, utf8mb4_de_pb_0900_as_cs, utf8mb4_eo_0900_ai_ci, utf8mb4_eo_0900_as_cs, utf8mb4_es_0900_ai_ci, utf8mb4_es_0900_as_cs, utf8mb4_es_trad_0900_ai_ci, utf8mb4_es_trad_0900_as_cs, utf8mb4_et_0900_ai_ci, utf8mb4_et_0900_as_cs, utf8mb4_hr_0900_ai_ci, utf8mb4_hr_0900_as_cs, utf8mb4_hu_0900_ai_ci, utf8mb4_hu_0900_as_cs, utf8mb4_is_0900_ai_ci, utf8mb4_is_0900_as_cs, utf8mb4_ja_0900_as_cs, utf8mb4_ja_0900_as_cs_ks, utf8mb4_la_0900_ai_ci, utf8mb4_la_0900_as_cs, utf8mb4_lt_0900_ai_ci, utf8mb4_lt_0900_as_cs, utf8mb4_lv_0900_ai_ci, utf8mb4_lv_0900_as_cs, utf8mb4_pl_0900_ai_ci, utf8mb4_pl_0900_as_cs, utf8mb4_ro_0900_ai_ci, utf8mb4_ro_0900_as_cs, utf8mb4_ru_0900_ai_ci, utf8mb4_ru_0900_as_cs, utf8mb4_sk_0900_ai_ci, utf8mb4_sk_0900_as_cs, utf8mb4_sl_0900_ai_ci, utf8mb4_sl_0900_as_cs, utf8mb4_sv_0900_ai_ci, utf8mb4_sv_0900_as_cs, utf8mb4_tr_0900_ai_ci, utf8mb4_vi_0900_ai_ci, utf8mb4_vi_0900_as_cs, utf8mb4_zh_0900_as_cs being the additional ones) - .
To make CREATE TABLE ... SELECT work the same way in statement based and row based replication it's by default executed as on the slave. One benefit of this is that if the slave dies in the middle of CREATE ... SELECT it will be able to continue.
One can use the variable to specify how CREATE TABLE and DROP TABLE is replicated.
Users created with MySQL's SHA256 password algorithm cannot be used in MariaDB 10.8 - MDEV-9804.
MariaDB 10.8 does not support Lateral Derived Tables - MDEV-19078.
MariaDB 10.8 does not support CIDR notation for user accounts - MDEV-25515.
MariaDB stores as true text, not in binary format as MySQL. MariaDB's JSON functions are much faster than MySQL's so there is no need to store in binary format, which would add complexity when manipulating JSON objects.
For the same reason, MariaDB's is an alias for . If you want to replicate JSON columns from MySQL to MariaDB, you should store JSON objects in MySQL in a TEXT or LONGTEXT column or use statement based replication. If you are using JSON columns and want to upgrade to MariaDB, you need to either convert them to TEXT or use to copy these tables to MariaDB. See also Making MariaDB understand MySQL JSON.
In MySQL, JSON is compared according to json values. In MariaDB JSON strings are normal strings and compared as strings.
MariaDB 10.8 does not support MySQL's JSON operators (-> and ->>) - MDEV-13594
MariaDB 10.8 supports the standard by producing null and a warning for when given invalid data, while MySQL produces an error.
MariaDB never allows authentication via roles, while MySQL permits this.
MySQL permits activating multiple roles at the same time. MariaDB can achieve the same result by creating an intermediate aggregate role.
In the , MySQL reports just the direct list of enabled roles, while MariaDB reports the enabled role, plus the effective inherited roles.
MySQL extends the .
MySQL includes the tables INFORMATION_SCHEMA.ROLE_TABLE_GRANTS, INFORMATION_SCHEMA.ROLE_ROUTINE_GRANTS, INFORMATION_SCHEMA.ROLE_COLUMN_GRANTS, and INFORMATION_SCHEMA ADMINISTRABLE_ROLE_AUTHORIZATIONS.
MySQL has the enabled by default. For performance reasons MariaDB 10.8 has it disabled by default. You can enable it by starting mysqld with the option --performance-schema.
In MariaDB 10.8, using without any table list will only close tables not in use, and tables not locked by the FLUSH TABLES connection. If there are no locked tables, FLUSH TABLES will be instant and will not cause any waits, as it no longer waits for tables in use. When a table list is provided, the server will wait for the end of any transactions that are using the tables. In MySQL, FLUSH TABLES only waits for the statements to complete.
MariaDB binaries (mysqld, etc.) give a warning if one uses a unique prefix of an option (such as --big-table instead of --big-tables). MySQL binaries require the full option name.
MariaDB 10.8 implements in a different way to MySQL 8.0.
MySQL's implementation of aborting statements that exceed a certain time to execute can only kill SELECTs, while MariaDB's can kill any queries (excluding stored procedures).
MariaDB 10.8 does not support MySQL's SELECT /*+ MAX_EXECUTION_TIME(n) */ ... - see Aborting Statements that Exceed a Certain Time to Execute.
MySQL 8.0 does not support the .
MariaDB 10.8 does not support the MySQL Memcached plugin (which has been deprecated in MySQL 8.0). However, data stored using memcached can be retrieved because the data is stored as InnoDB tables. MariaDB is able to start successfully with an error message of not being able to find libmemcached.so library.
In MySQL, X'HHHH', the standard SQL syntax for binary string literals, erroneously works in the same way as 0xHHHH, which could work as a number or string depending on the context. In MariaDB, this has been fixed to behave as a string in all contexts (and never as a number). See and for more details and examples.
In MariaDB 10.8, does not quote the DEFAULT value of an integer. MariaDB 10.2 and earlier, and MySQL, do. Since MariaDB can support defaults for and fields, while MySQL does not, will also append DEFAULT NULL where no default is explicitly provided to nullable BLOB or TEXT fields in MariaDB.
Since MariaDB supports and , these are both and can't be used as an without being quoted.
As a result of implementing , the has been renamed to VALUE().
MariaDB's supports SELECT statements, LOCK TABLES and various DDL statements, while MySQL's NOWAIT only supports SELECT.
MariaDB's cannot be added on and while MySQL's can - MDEV-25247
MariaDB returns an ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction when unable to lock within the time, while MySQL returns ERROR 3572 (HY000): Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set
MariaDB does not support table while it is write-locked - MDEV-30814
MariaDB does not support the optional init_vector argument for and or the block_encryption_mode variable - MDEV-9069
MariaDB does not support the --initialize option. Use instead. - MDEV-19010
MariaDB 10.8 does not support the ngram and MeCab full-text parser plugins - MDEV-10267, MDEV-10268.
MariaDB 10.8 does not support the MySQL X plugin.
MariaDB 10.8 does not support MySQL 8's “native” InnoDB partitioning handler - MDEV-29253
MariaDB 10.8 does not support for InnoDB.
The MySQL 8.0 and MariaDB 10.8 table contain slightly different fields.
MariaDB 10.8 client executables allow the connection protocol to be forced by specifying only connection properties on the command-line. See
The MySQL binary log includes the thread_id, while MariaDB's does not - MDEV-7850
The MariaDB 10.1 syntax supporting Spatial Reference System IDs for spatial data type columns with is not supported by MySQL. MySQL 8 introduced CREATE SPATIAL REFERENCE SYSTEM, which is not supported by MariaDB.
MariaDB 10.8 does not support the RESTART statement - MDEV-30813
uses a different compression algorithm, and different system variables to manage.
MariaDB 10.8 does not support the SELECT FOR UPDATE and FOR SHARE locks - MDEV-17514
, a storage engine with great compression
, MyISAM replacement with better caching.
(drop-in replacement for Federated)
The most notable features available in MariaDB, but not in MySQL, are:
Galera is a standard part of MariaDB Server.
in the form of:
(allow you to query and operate on historic data).
(allow you to query and operate on a temporal range of data).
(which combine both system-versioning and application-time periods).
, allowing instances, databases or tables to be rolled back to an old snapshot.
merged into the server
and
OR REPLACE syntax for statements, such as , , etc
syntax for setting the lock wait timeout.
Number of supported decimals in has increased from 30 to 38
Number of parts of an index increased from 16 to 32.
Added catchall for
Oracle-style statement
Lots of new
MariaDB than MySQL, including NO PAD collations.
command to reload SSL certificates without server restart.
IF NOT EXISTS clause added to and IF EXISTS clause added to and
. This makes
New server command, , and a new option, are added to instruct the server to wait for the last binlog event to be sent to all connected slaves before shutting down.
allows one to implement very efficient backups with minimal locking.
for and
gives the EXPLAIN plan for a query running in another thread. MySQL introduced the EXPLAIN FOR CONNECTION syntax to do the same thing.
(including )
and faster calls
MySQL 8 does not support
MySQL 8 does not support the use of as an alias for
When moving from MySQL 8.0 to MariaDB 10.4, please take note of the following incompatibilities:
For a list of function differences, see Function Differences Between MariaDB 10.4 and MySQL 8.0
For a list of system variable differences, see System Variable Differences Between MariaDB 10.4 and MySQL 8.0
MariaDB does not support MySQL's SET PERSIST - MDEV-16228
MariaDB's GTID is not compatible with MySQL's. Note that MariaDB and MySQL also have different , so these need to be adjusted when migrating.
The is now default on Unix-like systems, which is a major change to authentication in MariaDB. See for an overview of the changes.
Not all are across both MySQL and MariaDB. As of 10.4.14, MariaDB supports 40 character sets and 322 collations (armscii8_general_nopad_ci, armscii8_nopad_bin, ascbig5_chinese_nopad_ci, big5_nopad_bin, iicp1250_general_nopad_ci, cp1250_nopad_bin, cp1250_general_nopad_ci, cp1250_nopad_bin, cp1251_general_nopad_ci, cp1251_nopad_bin, cp1256_general_nopad_ci, cp1256_nopad_bin, cp1257_general_nopad_ci, cp1257_nopad_bin, cp850_general_nopad_ci, cp850_nopad_bin, cp852_general_nopad_ci, cp852_nopad_bin, cp866_general_nopad_ci, cp866_nopad_bin, cp932_japanese_nopad_ci, cp932_nopad_bin, dec8_nopad_bin, dec8_swedish_nopad_ci, eucjpms_japanese_nopad_ci, eucjpms_nopad_bin, eucjpms_japanese_nopad_ci, eucjpms_nopad_bin, euckr_korean_nopad_ci, euckr_nopad_bin, gb2312_chinese_nopad_ci, gb2312_nopad_bin, gbk_chinese_nopad_ci, gbk_nopad_bin, geostd8_general_nopad_ci, geostd8_nopad_bin, greek_general_nopad_ci, greek_nopad_bin, hebrew_general_nopad_ci, hebrew_nopad_bin, hp8_english_nopad_ci, hp8_nopad_bin, keybcs2_general_nopad_ci, keybcs2_nopad_bin, koi8r_general_nopad_ci, koi8r_nopad_bin, koi8u_general_nopad_ci, koi8u_nopad_bin, latin1_nopad_bin, latin1_swedish_nopad_ci, latin2_general_nopad_ci, latin2_nopad_bin, latin5_nopad_bin, latin5_turkish_ci, latin5_turkish_nopad_ci, latin7_general_nopad_ci, latin7_nopad_bin, macce_general_nopad_ci, macce_nopad_bin, macroman_general_nopad_ci, macroman_nopad_bin, sjis_japanese_nopad_ci, sjis_nopad_bin, swe7_nopad_bin, tis620_thai_nopad_ci, tis620_nopad_bin, ucs2_croatian_mysql561_ci, ucs2_general_mysql500_ci, ucs2_general_nopad_ci, ucs2_myanmar_ci, ucs2_nopad_bin, ucs2_swedish_ci, ucs2_thai_520_w2, ucs2_unicode_ci, ucs2_unicode_nopad_ci, ujis_japanese_nopad_ci, ujis_nopad_bin, utf16le_general_nopad_ci, utf16le_nopad_bin, utf16_croatian_mysql561_ci, utf16_general_nopad_ci, utf16_myanmar_ci, utf16_nopad_bin, utf16_thai_520_w2, utf16_unicode_520_nopad_ci, utf16_unicode_nopad_ci, utf32_croatian_mysql561_ci, utf32_general_nopad_ci, utf32_myanmar_ci, utf32_nopad_bin, utf32_thai_520_w2, utf32_unicode_520_nopad_ci, utf32_unicode_nopad_ci, utf8mb4_general_nopad_ci, utf8mb4_myanmar_ci, utf8mb4_nopad_bin, utf8mb4_thai_520_w2, utf8mb4_unicode_520_nopad_ci, utf8mb4_unicode_nopad_ci, utf8_croatian_mysql561_ci, utf8_general_nopad_ci, utf8_myanmar_ci, utf8_nopad_bin, utf8_thai_520_w2, utf8_unicode_520_nopad_ci, utf8_unicode_ci and utf8_unicode_nopad_ci being the additional ones). As of 8.0.21, MySQL supports 41 character sets (gb18030 being the additional one) and 272 collations (gb18030_bin, gb18030_chinese_ci, gb18030_unicode_520_ci, utf8mb4_0900_ai_ci, utf8mb4_0900_as_ci, utf8mb4_0900_as_cs, utf8mb4_0900_bin, utf8mb4_cs_0900_ai_ci, utf8mb4_cs_0900_as_cs, utf8mb4_da_0900_ai_ci, utf8mb4_da_0900_as_cs, utf8mb4_de_pb_0900_ai_ci, utf8mb4_de_pb_0900_as_cs, utf8mb4_eo_0900_ai_ci, utf8mb4_eo_0900_as_cs, utf8mb4_es_0900_ai_ci, utf8mb4_es_0900_as_cs, utf8mb4_es_trad_0900_ai_ci, utf8mb4_es_trad_0900_as_cs, utf8mb4_et_0900_ai_ci, utf8mb4_et_0900_as_cs, utf8mb4_hr_0900_ai_ci, utf8mb4_hr_0900_as_cs, utf8mb4_hu_0900_ai_ci, utf8mb4_hu_0900_as_cs, utf8mb4_is_0900_ai_ci, utf8mb4_is_0900_as_cs, utf8mb4_ja_0900_as_cs, utf8mb4_ja_0900_as_cs_ks, utf8mb4_la_0900_ai_ci, utf8mb4_la_0900_as_cs, utf8mb4_lt_0900_ai_ci, utf8mb4_lt_0900_as_cs, utf8mb4_lv_0900_ai_ci, utf8mb4_lv_0900_as_cs, utf8mb4_pl_0900_ai_ci, utf8mb4_pl_0900_as_cs, utf8mb4_ro_0900_ai_ci, utf8mb4_ro_0900_as_cs, utf8mb4_ru_0900_ai_ci, utf8mb4_ru_0900_as_cs, utf8mb4_sk_0900_ai_ci, utf8mb4_sk_0900_as_cs, utf8mb4_sl_0900_ai_ci, utf8mb4_sl_0900_as_cs, utf8mb4_sv_0900_ai_ci, utf8mb4_sv_0900_as_cs, utf8mb4_tr_0900_ai_ci, utf8mb4_vi_0900_ai_ci, utf8mb4_vi_0900_as_cs, utf8mb4_zh_0900_as_cs being the additional ones).
To make CREATE TABLE ... SELECT work the same way in statement based and row based replication it's by default executed as on the slave. One benefit of this is that if the slave dies in the middle of CREATE ... SELECT it will be able to continue.
One can use the variable to specify how CREATE TABLE and DROP TABLE is replicated.
Users created with MySQL's SHA256 password algorithm cannot be used in - .
MariaDB stores as true text, not in binary format as MySQL. MariaDB's JSON functions are much faster than MySQL's so there is no need to store in binary format, which would add complexity when manipulating JSON objects.
For the same reason, MariaDB's is an alias for . If you want to replicate JSON columns from MySQL to MariaDB, you should store JSON objects in MySQL in a TEXT or LONGTEXT column or use statement based replication. If you are using JSON columns and want to upgrade to MariaDB, you need to either convert them to TEXT or use to copy these tables to MariaDB.
In MySQL, JSON is compared according to json values. In MariaDB JSON strings are normal strings and compared as strings.
does not support MySQL's JSON operators (-> and ->>) -
supports the standard by producing null and a warning for when given invalid data, while MySQL produces an error.
MariaDB never allows authentication via roles, while MySQL permits this.
MySQL permits activating multiple roles at the same time. MariaDB can achieve the same result by creating an intermediate aggregate role.
In the , MySQL reports just the direct list of enabled roles, while MariaDB reports the enabled role, plus the effective inherited roles.
MySQL has the enabled by default. For performance reasons has it disabled by default. You can enable it by starting mysqld with the option --performance-schema.
MySQL features a new implementation of the performance_schema and a sys schema wrapper. These are only supported in .
In , using without any table list will only close tables not in use, and tables not locked by the FLUSH TABLES connection. If there are no locked tables, FLUSH TABLES will be instant and will not cause any waits, as it no longer waits for tables in use. When a table list is provided, the server will wait for the end of any transactions that are using the tables. In MySQL, FLUSH TABLES only waits for the statements to complete.
MariaDB binaries (mysqld, etc.) give a warning if one uses a unique prefix of an option (such as --big-table instead of --big-tables). MySQL binaries require the full option name.
implements in a different way to MySQL 8.0.
MySQL's implementation of can only kill SELECTs, while MariaDB's can kill any queries (excluding stored procedures).
does not support MySQL's SELECT /*+ MAX_EXECUTION_TIME(n) */ ... - see .
MySQL 8.0 does not support the .
does not support the MySQL Memcached plugin (which has been deprecated in MySQL 8.0). However, data stored using memcached can be retrieved because the data is stored as InnoDB tables. MariaDB is able to start successfully with an error message of not being able to find libmemcached.so library.
does not support MySQL 8.0's ALTER TABLE...RENAME INDEX statements (supported in ).
In MySQL, X'HHHH', the standard SQL syntax for binary string literals, erroneously works in the same way as 0xHHHH, which could work as a number or string depending on the context. In MariaDB, this has been fixed to behave as a string in all contexts (and never as a number). See and for more details and examples.
In , does not quote the DEFAULT value of an integer. and earlier, and MySQL, do. Since MariaDB can support defaults for and fields, while MySQL does not, will also append DEFAULT NULL where no default is explicitly provided to nullable BLOB or TEXT fields in MariaDB.
Since MariaDB supports and , these are both and can't be used as an without being quoted.
As a result of implementing , the has been renamed to VALUE().
MariaDB's supports SELECT statements, LOCK TABLES and various DDL statements, while MySQL's NOWAIT only supports SELECT.
MariaDB's cannot be added on and while MySQL's can -
MariaDB returns an ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction when unable to lock within the time, while MySQL returns ERROR 3572 (HY000): Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set
MariaDB does not support table while it is write-locked -
does not support Lateral Derived Tables - .
MariaDB does not support the optional init_vector argument for and or the block_encryption_mode variable -
MySQL supports SKIP LOCKED, while MariaDB doesn't.
MariaDB does not support the --initialize option. Use instead. -
does not support the ngram and MeCab full-text parser plugins - , .
does not support the .
does not support MySQL 8's “native” InnoDB partitioning handler -
does not support for InnoDB.
The MySQL 8.0 and table contain slightly different fields.
The MySQL binary log includes the thread_id, while MariaDB's does not -
The syntax supporting Spatial Reference System IDs for spatial data type columns with is not supported by MySQL. MySQL 8 introduced CREATE SPATIAL REFERENCE SYSTEM, which is not supported by MariaDB -
does not support the RESTART statement -
uses a different compression algorithm, and different system variables to manage.
does not support the SELECT FOR UPDATE and FOR SHARE locks -
Also see and .
ColumnStore utilizes a massively parallel distributed data architecture and is designed for big data scaling to process petabytes of data.
, a storage engine with great compression
allows one to archive MariaDB tables in Amazon S3, or any third-party public or private cloud that implements S3 API.
, MyISAM replacement with better caching.
(drop-in replacement for Federated)
The most notable features available in MariaDB, but not in MySQL, are:
Galera is a standard part of MariaDB Server.
in the form of:
(allow you to query and operate on historic data).
(allow you to query and operate on a temporal range of data), including the clause.
(which combine both system-versioning and application-time periods).
, allowing instances, databases or tables to be rolled back to an old snapshot.
support
merged into the server
OR REPLACE syntax for statements, such as , , etc
, ,
syntax for setting the lock wait timeout.
data type for storing UUIDs.
and data types for storing IPv6 and IPv4 addresses.
made more granular.
Multiple
Number of supported decimals in has increased from 30 to 38
Number of parts of an index increased from 16 to 32.
Added catchall for
Oracle-style statement
Lots of new
MariaDB (506) than MySQL (266).
command to reload SSL certificates without server restart.
IF NOT EXISTS clause added to and IF EXISTS clause added to and
. This makes
allows one to implement very efficient backups with minimal locking.
for and
gives the EXPLAIN plan for a query running in another thread. MySQL introduced the EXPLAIN FOR CONNECTION syntax to do the same thing.
(including )
and faster calls
MySQL 8 does not support
MySQL 8 does not support the use of as an alias for
When moving from MySQL 8.0 to MariaDB 10.10, please take note of the following incompatibilities:
For a list of function differences, see Function Differences Between MariaDB 10.10 and MySQL 8.0
For a list of system variable differences, see System Variable Differences Between MariaDB 10.10 and MySQL 8.0
MariaDB does not support MySQL's SET PERSIST - MDEV-16228
MariaDB's GTID is not compatible with MySQL's. Note that MariaDB and MySQL also have different , so these need to be adjusted when migrating.
The is now default on Unix-like systems, which is a major change to authentication in MariaDB. See for an overview of the changes.
All mysql* binaries are now named mariadb* (the previous mysql named is retained as a symlink for compatibility purposes)
Not all are across both MySQL and MariaDB. As of 10.10, MariaDB supports 40 character sets and 506 collations . As of 8.0.32, MySQL supports 41 character sets (gb18030 being the additional one - ) and 286 collations.
MariaDB indicates collation pad status as part of the name (e.g. utf8mb3_unicode_nopad_ci), while MySQL indicates pad status by means of an extra column in .
To make CREATE TABLE ... SELECT work the same way in statement based and row based replication it's by default executed as on the slave. One benefit of this is that if the slave dies in the middle of CREATE ... SELECT it will be able to continue.
One can use the variable to specify how CREATE TABLE and DROP TABLE is replicated.
Users created with MySQL's SHA256 password algorithm cannot be used in - .
does not support Lateral Derived Tables - .
does not support CIDR notation for user accounts - .
MariaDB stores as true text, not in binary format as MySQL. MariaDB's JSON functions are much faster than MySQL's so there is no need to store in binary format, which would add complexity when manipulating JSON objects.
For the same reason, MariaDB's is an alias for . If you want to replicate JSON columns from MySQL to MariaDB, you should store JSON objects in MySQL in a TEXT or LONGTEXT column or use statement-based replication. If you are using JSON columns and want to upgrade to MariaDB, use the plugin to automatically convert MySQL JSON to TEXT, or alternatively you need to either convert them to TEXT or use to copy these tables to MariaDB.
In MySQL, JSON is compared according to json values. In MariaDB JSON strings are normal strings and compared as strings.
does not support MySQL's JSON operators (-> and ->>) -
supports the standard by producing null and a warning for when given invalid data, while MySQL produces an error.
MariaDB never allows authentication via roles, while MySQL permits this.
MySQL permits activating multiple roles at the same time. MariaDB can achieve the same result by creating an intermediate aggregate role.
In the , MySQL reports just the direct list of enabled roles, while MariaDB reports the enabled role, plus the effective inherited roles.
MySQL has the enabled by default. For performance reasons has it disabled by default. You can enable it by starting mariadbd with the option --performance-schema.
In , using without any table list will only close tables not in use, and tables not locked by the FLUSH TABLES connection. If there are no locked tables, FLUSH TABLES will be instant and will not cause any waits, as it no longer waits for tables in use. When a table list is provided, the server will wait for the end of any transactions that are using the tables. In MySQL, FLUSH TABLES only waits for the statements to complete.
MariaDB binaries (mariadbd, etc.) give a warning if one uses a unique prefix of an option (such as --big-table instead of --big-tables). MySQL binaries require the full option name.
implements in a different way to MySQL 8.0.
MySQL's implementation of can only kill SELECTs, while MariaDB's can kill any queries (excluding stored procedures).
does not support MySQL's SELECT /*+ MAX_EXECUTION_TIME(n) */ ... - see .
MySQL 8.0 does not support the .
does not support the MySQL Memcached plugin (which has been deprecated in MySQL 8.0). However, data stored using memcached can be retrieved because the data is stored as InnoDB tables. MariaDB is able to start successfully with an error message of not being able to find libmemcached.so library.
In MySQL, X'HHHH', the standard SQL syntax for binary string literals, erroneously works in the same way as 0xHHHH, which could work as a number or string depending on the context. In MariaDB, this has been fixed to behave as a string in all contexts (and never as a number). See and for more details and examples.
In , does not quote the DEFAULT value of an integer. and earlier, and MySQL, do. Since MariaDB can support defaults for and fields, while MySQL does not, will also append DEFAULT NULL where no default is explicitly provided to nullable BLOB or TEXT fields in MariaDB.
As a result of implementing , the has been renamed to VALUE().
MariaDB's supports SELECT statements, LOCK TABLES and various DDL statements, while MySQL's NOWAIT only supports SELECT.
MariaDB's cannot be added on and while MySQL's can -
MariaDB does not support table while it is write-locked -
MariaDB returns an ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction when unable to lock within the time, while MySQL returns ERROR 3572 (HY000): Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set
MariaDB does not support the optional init_vector argument for and or the block_encryption_mode variable -
MariaDB does not support the --initialize option. Use instead. -
does not support the ngram and MeCab full-text parser plugins - , .
does not support the .
before does not support MySQL 8's “native” InnoDB partitioning handler -
does not support for InnoDB.
The MySQL 8.0 and table contain slightly different fields.
client executables allow the connection protocol to be forced by specifying only connection properties on the command-line. See
The MySQL binary log includes the thread_id, while MariaDB's does not -
The MariaDB syntax supporting Spatial Reference System IDs for spatial data type columns with is not supported by MySQL. MySQL 8 introduced CREATE SPATIAL REFERENCE SYSTEM, which is not supported by MariaDB -
does not support the RESTART statement -
uses a different compression algorithm, and different system variables to manage.
does not support the SELECT FOR UPDATE and FOR SHARE locks -
MariaDB maintains high levels of compatibility with MySQL, and most applications that use MySQL will work seamlessly with MariaDB. However, take note of the following incompatibilities and feature differences between MariaDB 10.5 and MySQL 8.0. It is based on the stable versions MySQL 8.0.22 and MariaDB 10.5.7. Note that MySQL 8 is an 'evergreen' release, so features may be added or removed in later releases.
In addition to the standard , , , , , , and storage engines, the following are also available with MariaDB 10.5:
utilizes a massively parallel distributed data architecture and is designed for big data scaling to process petabytes of data.
, a storage engine with great compression
allows one to archive MariaDB tables in Amazon S3, or any third-party public or private cloud that implements S3 API.
, MyISAM replacement with better caching.
(drop-in replacement for Federated)
The most notable , but not in MySQL, are:
is a standard part of MariaDB Server.
in the form of:
(allow you to query and operate on historic data).
(allow you to query and operate on a temporal range of data), including the clause added in 10.5.
When moving from MySQL 8.0 to , please take note of the following incompatibilities:
For a list of function differences, see .
For a list of system variable differences, see .
For replication, see .
MariaDB does not support MySQL's SET PERSIST -
For protocol differences, see .
Also see and .
MySQL extends the .
MySQL includes the tables INFORMATION_SCHEMA.ROLE_TABLE_GRANTS, INFORMATION_SCHEMA.ROLE_ROUTINE_GRANTS, INFORMATION_SCHEMA.ROLE_COLUMN_GRANTS, and INFORMATION_SCHEMA ADMINISTRABLE_ROLE_AUTHORIZATIONS.
MySQL extends the .
MySQL includes the tables INFORMATION_SCHEMA.ROLE_TABLE_GRANTS, INFORMATION_SCHEMA.ROLE_ROUTINE_GRANTS, INFORMATION_SCHEMA.ROLE_COLUMN_GRANTS, and INFORMATION_SCHEMA ADMINISTRABLE_ROLE_AUTHORIZATIONS.
(which combine both system-versioning and application-time periods).
, allowing instances, databases or tables to be rolled back to an old snapshot.
support
merged into the server
and
OR REPLACE syntax for statements, such as , , etc
, ,
syntax for setting the lock wait timeout.
data type for storing IPv6 addresses.
made more granular.
Number of supported decimals in has increased from 30 to 38
Number of parts of an index increased from 16 to 32.
Added catchall for list partitions
Oracle-style statement
Lots of new
MariaDB than MySQL, including NO PAD collations.
command to reload SSL certificates without server restart.
IF NOT EXISTS clause added to and IF EXISTS clause added to and
. This makes replication notably faster!
allows one to implement very efficient backups with minimal locking.
Progress reporting for and
gives the EXPLAIN plan for a query running in another thread. MySQL introduced the EXPLAIN FOR CONNECTION syntax to do the same thing.
(including )
and faster calls
MySQL 8 does not support
MySQL 8 does not support the use of as an alias for
MariaDB's GTID is not compatible with MySQL's. Note that MariaDB and MySQL also have different , so these need to be adjusted when migrating.
The is now default on Unix-like systems, which is a major change to authentication in MariaDB. See for an overview of the changes.
All mysql* binaries are now named mariadb* (the previous mysql named is retained as a symlink for compatibility purposes)
Not all are across both MySQL and MariaDB. As of 10.5.4, MariaDB supports 40 character sets and 322 collations (armscii8_general_nopad_ci, armscii8_nopad_bin, ascbig5_chinese_nopad_ci, big5_nopad_bin, iicp1250_general_nopad_ci, cp1250_nopad_bin, cp1250_general_nopad_ci, cp1250_nopad_bin, cp1251_general_nopad_ci, cp1251_nopad_bin, cp1256_general_nopad_ci, cp1256_nopad_bin, cp1257_general_nopad_ci, cp1257_nopad_bin, cp850_general_nopad_ci, cp850_nopad_bin, cp852_general_nopad_ci, cp852_nopad_bin, cp866_general_nopad_ci, cp866_nopad_bin, cp932_japanese_nopad_ci, cp932_nopad_bin, dec8_nopad_bin, dec8_swedish_nopad_ci, eucjpms_japanese_nopad_ci, eucjpms_nopad_bin, eucjpms_japanese_nopad_ci, eucjpms_nopad_bin, euckr_korean_nopad_ci, euckr_nopad_bin, gb2312_chinese_nopad_ci, gb2312_nopad_bin, gbk_chinese_nopad_ci, gbk_nopad_bin, geostd8_general_nopad_ci, geostd8_nopad_bin, greek_general_nopad_ci, greek_nopad_bin, hebrew_general_nopad_ci, hebrew_nopad_bin, hp8_english_nopad_ci, hp8_nopad_bin, keybcs2_general_nopad_ci, keybcs2_nopad_bin, koi8r_general_nopad_ci, koi8r_nopad_bin, koi8u_general_nopad_ci, koi8u_nopad_bin, latin1_nopad_bin, latin1_swedish_nopad_ci, latin2_general_nopad_ci, latin2_nopad_bin, latin5_nopad_bin, latin5_turkish_ci, latin5_turkish_nopad_ci, latin7_general_nopad_ci, latin7_nopad_bin, macce_general_nopad_ci, macce_nopad_bin, macroman_general_nopad_ci, macroman_nopad_bin, sjis_japanese_nopad_ci, sjis_nopad_bin, swe7_nopad_bin, tis620_thai_nopad_ci, tis620_nopad_bin, ucs2_croatian_mysql561_ci, ucs2_general_mysql500_ci, ucs2_general_nopad_ci, ucs2_myanmar_ci, ucs2_nopad_bin, ucs2_swedish_ci, ucs2_thai_520_w2, ucs2_unicode_ci, ucs2_unicode_nopad_ci, ujis_japanese_nopad_ci, ujis_nopad_bin, utf16le_general_nopad_ci, utf16le_nopad_bin, utf16_croatian_mysql561_ci, utf16_general_nopad_ci, utf16_myanmar_ci, utf16_nopad_bin, utf16_thai_520_w2, utf16_unicode_520_nopad_ci, utf16_unicode_nopad_ci, utf32_croatian_mysql561_ci, utf32_general_nopad_ci, utf32_myanmar_ci, utf32_nopad_bin, utf32_thai_520_w2, utf32_unicode_520_nopad_ci, utf32_unicode_nopad_ci, utf8mb4_general_nopad_ci, utf8mb4_myanmar_ci, utf8mb4_nopad_bin, utf8mb4_thai_520_w2, utf8mb4_unicode_520_nopad_ci, utf8mb4_unicode_nopad_ci, utf8_croatian_mysql561_ci, utf8_general_nopad_ci, utf8_myanmar_ci, utf8_nopad_bin, utf8_thai_520_w2, utf8_unicode_520_nopad_ci, utf8_unicode_ci and utf8_unicode_nopad_ci being the additional ones). As of 8.0.21, MySQL supports 41 character sets (gb18030 being the additional one) and 272 collations (gb18030_bin, gb18030_chinese_ci, gb18030_unicode_520_ci, utf8mb4_0900_ai_ci, utf8mb4_0900_as_ci, utf8mb4_0900_as_cs, utf8mb4_0900_bin, utf8mb4_cs_0900_ai_ci, utf8mb4_cs_0900_as_cs, utf8mb4_da_0900_ai_ci, utf8mb4_da_0900_as_cs, utf8mb4_de_pb_0900_ai_ci, utf8mb4_de_pb_0900_as_cs, utf8mb4_eo_0900_ai_ci, utf8mb4_eo_0900_as_cs, utf8mb4_es_0900_ai_ci, utf8mb4_es_0900_as_cs, utf8mb4_es_trad_0900_ai_ci, utf8mb4_es_trad_0900_as_cs, utf8mb4_et_0900_ai_ci, utf8mb4_et_0900_as_cs, utf8mb4_hr_0900_ai_ci, utf8mb4_hr_0900_as_cs, utf8mb4_hu_0900_ai_ci, utf8mb4_hu_0900_as_cs, utf8mb4_is_0900_ai_ci, utf8mb4_is_0900_as_cs, utf8mb4_ja_0900_as_cs, utf8mb4_ja_0900_as_cs_ks, utf8mb4_la_0900_ai_ci, utf8mb4_la_0900_as_cs, utf8mb4_lt_0900_ai_ci, utf8mb4_lt_0900_as_cs, utf8mb4_lv_0900_ai_ci, utf8mb4_lv_0900_as_cs, utf8mb4_pl_0900_ai_ci, utf8mb4_pl_0900_as_cs, utf8mb4_ro_0900_ai_ci, utf8mb4_ro_0900_as_cs, utf8mb4_ru_0900_ai_ci, utf8mb4_ru_0900_as_cs, utf8mb4_sk_0900_ai_ci, utf8mb4_sk_0900_as_cs, utf8mb4_sl_0900_ai_ci, utf8mb4_sl_0900_as_cs, utf8mb4_sv_0900_ai_ci, utf8mb4_sv_0900_as_cs, utf8mb4_tr_0900_ai_ci, utf8mb4_vi_0900_ai_ci, utf8mb4_vi_0900_as_cs, utf8mb4_zh_0900_as_cs being the additional ones).
To make CREATE TABLE ... SELECT work the same way in statement based and row based replication it's by default executed as on the slave. One benefit of this is that if the slave dies in the middle of CREATE ... SELECT it will be able to continue.
One can use the variable to specify how CREATE TABLE and DROP TABLE is replicated.
Users created with MySQL's SHA256 password algorithm cannot be used in MariaDB 10.5 - MDEV-9804.
MariaDB stores as true text, not in binary format as MySQL. MariaDB's JSON functions are much faster than MySQL's so there is no need to store in binary format, which would add complexity when manipulating JSON objects.
For the same reason, MariaDB's is an alias for . If you want to replicate JSON columns from MySQL to MariaDB, you should store JSON objects in MySQL in a TEXT or LONGTEXT column or use statement-based replication. If you are using JSON columns and want to upgrade to MariaDB, use the plugin to automatically convert MySQL JSON to TEXT, or alternatively you need to either convert them to TEXT or use to copy these tables to MariaDB.
In MySQL, JSON is compared according to json values. In MariaDB JSON strings are normal strings and compared as strings.
MariaDB 10.5 does not support MySQL's JSON operators (-> and ->>) - MDEV-13594
MariaDB 10.5 supports the standard by producing null and a warning for when given invalid data, while MySQL produces an error.
MariaDB never allows authentication via roles, while MySQL permits this.
MySQL permits activating multiple roles at the same time. MariaDB can achieve the same result by creating an intermediate aggregate role.
In the , MySQL reports just the direct list of enabled roles, while MariaDB reports the enabled role, plus the effective inherited roles.
MySQL extends the .
MySQL includes the tables INFORMATION_SCHEMA.ROLE_TABLE_GRANTS, INFORMATION_SCHEMA.ROLE_ROUTINE_GRANTS, INFORMATION_SCHEMA.ROLE_COLUMN_GRANTS, and INFORMATION_SCHEMA ADMINISTRABLE_ROLE_AUTHORIZATIONS.
MySQL has the enabled by default. For performance reasons MariaDB 10.5 has it disabled by default. You can enable it by starting mariadbd with the option --performance-schema.
In MariaDB 10.5, using without any table list will only close tables not in use, and tables not locked by the FLUSH TABLES connection. If there are no locked tables, FLUSH TABLES will be instant and will not cause any waits, as it no longer waits for tables in use. When a table list is provided, the server will wait for the end of any transactions that are using the tables. In MySQL, FLUSH TABLES only waits for the statements to complete.
MariaDB binaries (mariadbd, etc.) give a warning if one uses a unique prefix of an option (such as --big-table instead of --big-tables). MySQL binaries require the full option name.
MariaDB 10.5 implements in a different way to MySQL 8.0.
MySQL's implementation of aborting statements that exceed a certain time to execute can only kill SELECTs, while MariaDB's can kill any queries (excluding stored procedures).
MariaDB 10.5 does not support MySQL's SELECT /*+ MAX_EXECUTION_TIME(n) */ ... - see Aborting Statements that Exceed a Certain Time to Execute.
MySQL 8.0 does not support the .
MariaDB 10.5 does not support the MySQL Memcached plugin (which has been deprecated in MySQL 8.0). However, data stored using memcached can be retrieved because the data is stored as InnoDB tables. MariaDB is able to start successfully with an error message of not being able to find libmemcached.so library.
In MySQL, X'HHHH', the standard SQL syntax for binary string literals, erroneously works in the same way as 0xHHHH, which could work as a number or string depending on the context. In MariaDB, this has been fixed to behave as a string in all contexts (and never as a number). See and for more details and examples.
In MariaDB 10.5, does not quote the DEFAULT value of an integer. MariaDB 10.2 and earlier, and MySQL, do. Since MariaDB can support defaults for and fields, while MySQL does not, will also append DEFAULT NULL where no default is explicitly provided to nullable BLOB or TEXT fields in MariaDB.
Since MariaDB supports and , these are both and can't be used as an without being quoted.
As a result of implementing , the has been renamed to VALUE().
MariaDB's supports SELECT statements, LOCK TABLES and various DDL statements, while MySQL's NOWAIT only supports SELECT.
MariaDB's cannot be added on and while MySQL's can - MDEV-25247
MariaDB returns an ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction when unable to lock within the time, while MySQL returns ERROR 3572 (HY000): Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set
MariaDB does not support table while it is write-locked - MDEV-30814
MariaDB 10.5 does not support Lateral Derived Tables - MDEV-19078.
MariaDB does not support the optional init_vector argument for and or the block_encryption_mode variable - MDEV-9069
MariaDB does not support the --initialize option. Use instead. - MDEV-19010
MariaDB 10.5 does not support the ngram and MeCab full-text parser plugins - MDEV-10267, MDEV-10268.
MariaDB 10.5 does not support the MySQL X plugin.
MariaDB 10.5 does not support MySQL 8's “native” InnoDB partitioning handler - MDEV-29253
MariaDB 10.5 does not support for InnoDB.
The MySQL 8.0 and MariaDB 10.5 table contain slightly different fields.
The MySQL binary log includes the thread_id, while MariaDB's does not - MDEV-7850
The MariaDB 10.1 syntax supporting Spatial Reference System IDs for spatial data type columns with is not supported by MySQL. MySQL 8 introduced CREATE SPATIAL REFERENCE SYSTEM, which is not supported by MariaDB - MDEV-29953
MariaDB 10.5 does not support the RESTART statement - MDEV-30813
MariaDB 10.5 does not support the SELECT FOR UPDATE and FOR SHARE locks - MDEV-17514
uses a different compression algorithm, and different system variables to manage.
MariaDB maintains high levels of compatibility with MySQL, and most applications that use MySQL will work seamlessly with MariaDB. However, take note of the following incompatibilities and feature differences between MariaDB 10.9 and MySQL 8.0. It is based on the versions MySQL 8.0.25 and MariaDB 10.9.5. Note that MySQL 8 is an 'evergreen' release, so features may be added or removed in later releases.
In addition to the standard , , , , , , and storage engines, the following are also available with MariaDB 10.9:
utilizes a massively parallel distributed data architecture and is designed for big data scaling to process petabytes of data.
, a storage engine with great compression
allows one to archive MariaDB tables in Amazon S3, or any third-party public or private cloud that implements S3 API.
, MyISAM replacement with better caching.
(drop-in replacement for Federated)
The most notable , but not in MySQL, are:
is a standard part of MariaDB Server.
in the form of:
(allow you to query and operate on historic data).
(allow you to query and operate on a temporal range of data), including the clause.
When moving from MySQL 8.0 to , please take note of the following incompatibilities:
For a list of function differences, see
For a list of system variable differences, see
MariaDB does not support MySQL's SET PERSIST -
MariaDB's GTID is not compatible with MySQL's. Note that MariaDB and MySQL also have different , so these need to be adjusted when migrating.
(which combine both system-versioning and application-time periods).
, allowing instances, databases or tables to be rolled back to an old snapshot.
support
merged into the server
and
OR REPLACE syntax for statements, such as , , etc
, ,
syntax for setting the lock wait timeout.
data type for storing UUIDs.
data type for storing IPv6 addresses.
made more granular.
Multiple
Number of supported decimals in has increased from 30 to 38
Added catchall for list partitions
Oracle-style statement
Lots of new
MariaDB than MySQL, including NO PAD collations.
command to reload SSL certificates without server restart.
IF NOT EXISTS clause added to and IF EXISTS clause added to and
. This makes replication notably faster!
allows one to implement very efficient backups with minimal locking.
Progress reporting for and
gives the EXPLAIN plan for a query running in another thread. MySQL introduced the EXPLAIN FOR CONNECTION syntax to do the same thing.
(including )
and faster calls
MySQL 8 does not support
MySQL 8 does not support the use of as an alias for
The is now default on Unix-like systems, which is a major change to authentication in MariaDB. See for an overview of the changes.
All mysql* binaries are now named mariadb* (the previous mysql named is retained as a symlink for compatibility purposes)
Not all are across both MySQL and MariaDB. As of 10.9.5, MariaDB supports 40 character sets and 322 collations (armscii8_general_nopad_ci, armscii8_nopad_bin, ascbig5_chinese_nopad_ci, big5_nopad_bin, iicp1250_general_nopad_ci, cp1250_nopad_bin, cp1250_general_nopad_ci, cp1250_nopad_bin, cp1251_general_nopad_ci, cp1251_nopad_bin, cp1256_general_nopad_ci, cp1256_nopad_bin, cp1257_general_nopad_ci, cp1257_nopad_bin, cp850_general_nopad_ci, cp850_nopad_bin, cp852_general_nopad_ci, cp852_nopad_bin, cp866_general_nopad_ci, cp866_nopad_bin, cp932_japanese_nopad_ci, cp932_nopad_bin, dec8_nopad_bin, dec8_swedish_nopad_ci, eucjpms_japanese_nopad_ci, eucjpms_nopad_bin, eucjpms_japanese_nopad_ci, eucjpms_nopad_bin, euckr_korean_nopad_ci, euckr_nopad_bin, gb2312_chinese_nopad_ci, gb2312_nopad_bin, gbk_chinese_nopad_ci, gbk_nopad_bin, geostd8_general_nopad_ci, geostd8_nopad_bin, greek_general_nopad_ci, greek_nopad_bin, hebrew_general_nopad_ci, hebrew_nopad_bin, hp8_english_nopad_ci, hp8_nopad_bin, keybcs2_general_nopad_ci, keybcs2_nopad_bin, koi8r_general_nopad_ci, koi8r_nopad_bin, koi8u_general_nopad_ci, koi8u_nopad_bin, latin1_nopad_bin, latin1_swedish_nopad_ci, latin2_general_nopad_ci, latin2_nopad_bin, latin5_nopad_bin, latin5_turkish_ci, latin5_turkish_nopad_ci, latin7_general_nopad_ci, latin7_nopad_bin, macce_general_nopad_ci, macce_nopad_bin, macroman_general_nopad_ci, macroman_nopad_bin, sjis_japanese_nopad_ci, sjis_nopad_bin, swe7_nopad_bin, tis620_thai_nopad_ci, tis620_nopad_bin, ucs2_croatian_mysql561_ci, ucs2_general_mysql500_ci, ucs2_general_nopad_ci, ucs2_myanmar_ci, ucs2_nopad_bin, ucs2_swedish_ci, ucs2_thai_520_w2, ucs2_unicode_ci, ucs2_unicode_nopad_ci, ujis_japanese_nopad_ci, ujis_nopad_bin, utf16le_general_nopad_ci, utf16le_nopad_bin, utf16_croatian_mysql561_ci, utf16_general_nopad_ci, utf16_myanmar_ci, utf16_nopad_bin, utf16_thai_520_w2, utf16_unicode_520_nopad_ci, utf16_unicode_nopad_ci, utf32_croatian_mysql561_ci, utf32_general_nopad_ci, utf32_myanmar_ci, utf32_nopad_bin, utf32_thai_520_w2, utf32_unicode_520_nopad_ci, utf32_unicode_nopad_ci, utf8mb4_general_nopad_ci, utf8mb4_myanmar_ci, utf8mb4_nopad_bin, utf8mb4_thai_520_w2, utf8mb4_unicode_520_nopad_ci, utf8mb4_unicode_nopad_ci, utf8_croatian_mysql561_ci, utf8_general_nopad_ci, utf8_myanmar_ci, utf8_nopad_bin, utf8_thai_520_w2, utf8_unicode_520_nopad_ci, utf8_unicode_ci and utf8_unicode_nopad_ci being the additional ones). As of 8.0.25, MySQL supports 41 character sets (gb18030 being the additional one - ) and 272 collations (gb18030_bin, gb18030_chinese_ci, gb18030_unicode_520_ci, utf8mb4_0900_ai_ci, utf8mb4_0900_as_ci, utf8mb4_0900_as_cs, utf8mb4_0900_bin, utf8mb4_cs_0900_ai_ci, utf8mb4_cs_0900_as_cs, utf8mb4_da_0900_ai_ci, utf8mb4_da_0900_as_cs, utf8mb4_de_pb_0900_ai_ci, utf8mb4_de_pb_0900_as_cs, utf8mb4_eo_0900_ai_ci, utf8mb4_eo_0900_as_cs, utf8mb4_es_0900_ai_ci, utf8mb4_es_0900_as_cs, utf8mb4_es_trad_0900_ai_ci, utf8mb4_es_trad_0900_as_cs, utf8mb4_et_0900_ai_ci, utf8mb4_et_0900_as_cs, utf8mb4_hr_0900_ai_ci, utf8mb4_hr_0900_as_cs, utf8mb4_hu_0900_ai_ci, utf8mb4_hu_0900_as_cs, utf8mb4_is_0900_ai_ci, utf8mb4_is_0900_as_cs, utf8mb4_ja_0900_as_cs, utf8mb4_ja_0900_as_cs_ks, utf8mb4_la_0900_ai_ci, utf8mb4_la_0900_as_cs, utf8mb4_lt_0900_ai_ci, utf8mb4_lt_0900_as_cs, utf8mb4_lv_0900_ai_ci, utf8mb4_lv_0900_as_cs, utf8mb4_pl_0900_ai_ci, utf8mb4_pl_0900_as_cs, utf8mb4_ro_0900_ai_ci, utf8mb4_ro_0900_as_cs, utf8mb4_ru_0900_ai_ci, utf8mb4_ru_0900_as_cs, utf8mb4_sk_0900_ai_ci, utf8mb4_sk_0900_as_cs, utf8mb4_sl_0900_ai_ci, utf8mb4_sl_0900_as_cs, utf8mb4_sv_0900_ai_ci, utf8mb4_sv_0900_as_cs, utf8mb4_tr_0900_ai_ci, utf8mb4_vi_0900_ai_ci, utf8mb4_vi_0900_as_cs, utf8mb4_zh_0900_as_cs being the additional ones) - .
To make CREATE TABLE ... SELECT work the same way in statement based and row based replication it's by default executed as on the slave. One benefit of this is that if the slave dies in the middle of CREATE ... SELECT it will be able to continue.
One can use the variable to specify how CREATE TABLE and DROP TABLE is replicated.
Users created with MySQL's SHA256 password algorithm cannot be used in MariaDB 10.9 - MDEV-9804.
MariaDB 10.9 does not support Lateral Derived Tables - MDEV-19078.
MariaDB 10.9 does not support CIDR notation for user accounts - MDEV-25515.
MariaDB stores as true text, not in binary format as MySQL. MariaDB's JSON functions are much faster than MySQL's so there is no need to store in binary format, which would add complexity when manipulating JSON objects.
For the same reason, MariaDB's is an alias for . If you want to replicate JSON columns from MySQL to MariaDB, you should store JSON objects in MySQL in a TEXT or LONGTEXT column or use statement-based replication. If you are using JSON columns and want to upgrade to MariaDB, use the plugin to automatically convert MySQL JSON to TEXT, or alternatively you need to either convert them to TEXT or use to copy these tables to MariaDB.
In MySQL, JSON is compared according to json values. In MariaDB JSON strings are normal strings and compared as strings.
MariaDB 10.9 does not support MySQL's JSON operators (-> and ->>) - MDEV-13594
MariaDB 10.9 supports the standard by producing null and a warning for when given invalid data, while MySQL produces an error.
MariaDB never allows authentication via roles, while MySQL permits this.
MySQL permits activating multiple roles at the same time. MariaDB can achieve the same result by creating an intermediate aggregate role.
In the , MySQL reports just the direct list of enabled roles, while MariaDB reports the enabled role, plus the effective inherited roles.
MySQL extends the .
MySQL includes the tables INFORMATION_SCHEMA.ROLE_TABLE_GRANTS, INFORMATION_SCHEMA.ROLE_ROUTINE_GRANTS, INFORMATION_SCHEMA.ROLE_COLUMN_GRANTS, and INFORMATION_SCHEMA ADMINISTRABLE_ROLE_AUTHORIZATIONS.
MySQL has the enabled by default. For performance reasons MariaDB 10.9 has it disabled by default. You can enable it by starting mariadbd with the option --performance-schema.
In MariaDB 10.9, using without any table list will only close tables not in use, and tables not locked by the FLUSH TABLES connection. If there are no locked tables, FLUSH TABLES will be instant and will not cause any waits, as it no longer waits for tables in use. When a table list is provided, the server will wait for the end of any transactions that are using the tables. In MySQL, FLUSH TABLES only waits for the statements to complete.
MariaDB binaries (mariadbd, etc.) give a warning if one uses a unique prefix of an option (such as --big-table instead of --big-tables). MySQL binaries require the full option name.
MariaDB 10.9 implements in a different way to MySQL 8.0.
MySQL's implementation of aborting statements that exceed a certain time to execute can only kill SELECTs, while MariaDB's can kill any queries (excluding stored procedures).
MariaDB 10.9 does not support MySQL's SELECT /*+ MAX_EXECUTION_TIME(n) */ ... - see Aborting Statements that Exceed a Certain Time to Execute.
MySQL 8.0 does not support the .
MariaDB 10.9 does not support the MySQL Memcached plugin (which has been deprecated in MySQL 8.0). However, data stored using memcached can be retrieved because the data is stored as InnoDB tables. MariaDB is able to start successfully with an error message of not being able to find libmemcached.so library.
In MySQL, X'HHHH', the standard SQL syntax for binary string literals, erroneously works in the same way as 0xHHHH, which could work as a number or string depending on the context. In MariaDB, this has been fixed to behave as a string in all contexts (and never as a number). See and for more details and examples.
In MariaDB 10.9, does not quote the DEFAULT value of an integer. MariaDB 10.2 and earlier, and MySQL, do. Since MariaDB can support defaults for and fields, while MySQL does not, will also append DEFAULT NULL where no default is explicitly provided to nullable BLOB or TEXT fields in MariaDB.
Since MariaDB supports and , these are both and can't be used as an without being quoted.
As a result of implementing , the has been renamed to VALUE().
MariaDB's supports SELECT statements, LOCK TABLES and various DDL statements, while MySQL's NOWAIT only supports SELECT.
MariaDB's cannot be added on and while MySQL's can - MDEV-25247
MariaDB returns an ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction when unable to lock within the time, while MySQL returns ERROR 3572 (HY000): Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set
MariaDB does not support table while it is write-locked - MDEV-30814
MariaDB does not support the optional init_vector argument for and or the block_encryption_mode variable - MDEV-9069
MariaDB does not support the --initialize option. Use instead -MDEV-19010
MariaDB 10.9 does not support the ngram and MeCab full-text parser plugins - MDEV-10267, MDEV-10268
MariaDB 10.9 does not support the MySQL X plugin.
MariaDB 10.9 before MariaDB 10.9.8 does not support MySQL 8's “native” InnoDB partitioning handler - MDEV-29253
MariaDB 10.9 does not support for InnoDB.
The MySQL 8.0 and MariaDB 10.9 table contain slightly different fields.
MariaDB 10.9 client executables allow the connection protocol to be forced by specifying only connection properties on the command-line. See
The MySQL binary log includes the thread_id, while MariaDB's does not - MDEV-7850
The MariaDB 10.1 syntax supporting Spatial Reference System IDs for spatial data type columns with is not supported by MySQL. MySQL 8 introduced CREATE SPATIAL REFERENCE SYSTEM, which is not supported by MariaDB.
MariaDB 10.9 does not support the RESTART statement - MDEV-30813
uses a different compression algorithm, and different system variables to manage.
MariaDB 10.9 does not support the SELECT FOR UPDATE and FOR SHARE locks - MDEV-17514
This page is licensed: CC BY-SA / Gnu FDL