MySQL Compatibility Matrix¶
Summary¶
Status |
Count |
|---|---|
✅ Full |
131 |
⚠️ Partial |
97 |
❌ None |
1 |
🟣 MatrixOne-only |
96 |
❓ Unknown |
48 |
Total |
373 |
SQL Statements¶
Status |
Count |
|---|---|
✅ Full |
21 |
⚠️ Partial |
58 |
❌ None |
1 |
🟣 MatrixOne-only |
53 |
Total |
133 |
SQL Statements¶
Statement |
MySQL Compat |
Notes |
|---|---|---|
🟣 MatrixOne-only |
[MO-only] Index page describing MatrixOne’s own SQL statement taxonomy; not a MySQL-equivalent concept. |
Data Control Language (DCL)¶
Statement |
MySQL Compat |
Notes |
|---|---|---|
🟣 MatrixOne-only |
[MO-only] ALTER ACCOUNT |
|
⚠️ Partial |
Only ALTER USER can change passwords; account-limit clauses not honoured |
|
🟣 MatrixOne-only |
[MO-only] CREATE ACCOUNT … ADMIN_NAME … |
|
⚠️ Partial |
Role exists inside MatrixOne’s multi-account model; roles are account-scoped, not server-global as in MySQL. |
|
⚠️ Partial |
IDENTIFIED BY is the only supported password form; IDENTIFIED WITH plugins not supported |
|
🟣 MatrixOne-only |
[MO-only] DROP ACCOUNT |
|
⚠️ Partial |
Role exists inside MatrixOne’s multi-account model; roles are account-scoped, not server-global as in MySQL. |
|
⚠️ Partial |
User identifier is a bare username scoped to the current account; MySQL uses ‘user’@’host’ tuples. |
|
⚠️ Partial |
Authorization logic differs from MySQL — MatrixOne evaluates via its role/account model |
|
⚠️ Partial |
Recovery logic differs from MySQL — privileges return to the role/account graph |
|
🟣 MatrixOne-only |
— |
Data Definition Language (DDL)¶
Statement |
MySQL Compat |
Notes |
|---|---|---|
🟣 MatrixOne-only |
[MO-only] ALTER PITR |
|
🟣 MatrixOne-only |
[MO-only] ALTER PUBLICATION |
|
🟣 MatrixOne-only |
[MO-only] ALTER … REINDEX (rebuild vector index) |
|
🟣 MatrixOne-only |
[MO-only] ALTER SEQUENCE |
|
🟣 MatrixOne-only |
[MO-only] ALTER STAGE |
|
⚠️ Partial |
Multiple ALTER TABLE operations can be combined in one statement, with limitation: DROP PRIMARY KEY cannot be combined with RENAME COLUMN, CHANGE COLUMN, or DROP COLUMN (causes server panic); DROP PK + ADD COLUMN and DROP PK + MODIFY COLUMN work correctly |
|
⚠️ Partial |
WITH CHECK OPTION is accepted in CREATE VIEW (syntax only, views are read-only) but rejected as a syntax error in ALTER VIEW |
|
🟣 MatrixOne-only |
— |
|
🟣 MatrixOne-only |
[MO-only] CREATE TABLE … CLONE db.table [TO ACCOUNT …] |
|
🟣 MatrixOne-only |
[MO-only] CREATE CLUSTER TABLE |
|
⚠️ Partial |
Only utf8mb4 / utf8mb4_bin are functional; other charsets/collations are syntactically accepted but have no effect |
|
🟣 MatrixOne-only |
[MO-only] CREATE DYNAMIC TABLE |
|
🟣 MatrixOne-only |
[MO-only] CREATE EXTERNAL TABLE |
|
⚠️ Partial |
MatrixOne full-text index is implemented on TAE storage with CJK/English optimizations; MySQL implements it on InnoDB/MyISAM with different stopword and parser semantics. |
|
🟣 MatrixOne-only |
[MO-only] CREATE FUNCTION … LANGUAGE PYTHON AS … |
|
⚠️ Partial |
Only LANGUAGE SQL and LANGUAGE PYTHON are supported; usage differs significantly from MySQL stored functions |
|
⚠️ Partial |
Secondary indexes are supported and participate in query optimization (as of MO 3.0.12, EXPLAIN shows Index Table Scan for secondary index queries). Does not support index hints (USE INDEX, FORCE INDEX, IGNORE INDEX), function-based indexes, or FULLTEXT index via CREATE INDEX syntax (use CREATE FULLTEXT INDEX instead). |
|
🟣 MatrixOne-only |
[MO-only] CREATE INDEX … USING HNSW |
|
🟣 MatrixOne-only |
[MO-only] CREATE INDEX … USING IVFFLAT |
|
🟣 MatrixOne-only |
[MO-only] CREATE PITR … RANGE N {h|d|mo|y} |
|
🟣 MatrixOne-only |
[MO-only] CREATE PUBLICATION |
|
🟣 MatrixOne-only |
[MO-only] CREATE SEQUENCE (PostgreSQL-style) |
|
🟣 MatrixOne-only |
[MO-only] CREATE SNAPSHOT FOR {ACCOUNT|DATABASE|TABLE|CLUSTER} |
|
🟣 MatrixOne-only |
[MO-only] CREATE SOURCE (stream/Kafka connector) |
|
🟣 MatrixOne-only |
[MO-only] CREATE STAGE (external file-system binding) |
|
⚠️ Partial |
ENGINE= clause is syntactically accepted but ignored; MatrixOne uses TAE exclusively |
|
✅ Full |
— |
|
✅ Full |
— |
|
🟣 MatrixOne-only |
[MO-only] CREATE TASK / ALTER TASK / DROP TASK / EXECUTE TASK / SHOW TASKS (MO-specific scheduled SQL tasks; MySQL uses CREATE EVENT instead) |
|
⚠️ Partial |
WITH CHECK OPTION is syntactically accepted but not enforced |
|
🟣 MatrixOne-only |
[MO-only] CREATE DATABASE … FROM … PUBLICATION … |
|
🟣 MatrixOne-only |
[MO-only] DATA BRANCH CREATE (Git-for-Data) |
|
🟣 MatrixOne-only |
[MO-only] DATA BRANCH DELETE |
|
🟣 MatrixOne-only |
[MO-only] DATA BRANCH DIFF |
|
🟣 MatrixOne-only |
[MO-only] DATA BRANCH MERGE |
|
🟣 MatrixOne-only |
[MO-only] DATA BRANCH PICK (cherry-pick specific rows between branch tables, Git-for-Data feature) |
|
✅ Full |
— |
|
⚠️ Partial |
Drops MatrixOne-style SQL / Python functions, not MySQL stored procedures/functions |
|
⚠️ Partial |
MO accepts DROP INDEX IF EXISTS syntax (MySQL 8.0 does not), but IF EXISTS does not suppress errors for missing indexes; it returns internal error 20101 instead of a silent skip |
|
🟣 MatrixOne-only |
[MO-only] DROP PITR |
|
🟣 MatrixOne-only |
[MO-only] DROP PUBLICATION |
|
🟣 MatrixOne-only |
[MO-only] DROP SEQUENCE |
|
🟣 MatrixOne-only |
[MO-only] DROP SNAPSHOT |
|
🟣 MatrixOne-only |
[MO-only] DROP STAGE |
|
✅ Full |
— |
|
⚠️ Partial |
MO does not support dropping multiple views in a single statement; only a single view per DROP VIEW. MySQL 8.0 supports dropping multiple views (e.g., DROP VIEW v1, v2). |
|
⚠️ Partial |
MO does not support RENAME TABLE across databases; when given cross-database syntax, MO renames the table within its current database instead of raising an error. MySQL 8.0 supports cross-database RENAME TABLE. |
|
🟣 MatrixOne-only |
[MO-only] RESTORE … FROM PITR |
|
🟣 MatrixOne-only |
[MO-only] RESTORE … FROM SNAPSHOT |
|
✅ Full |
— |
Data Manipulation Language (DML)¶
Statement |
MySQL Compat |
Notes |
|---|---|---|
✅ Full |
This page describes the CASE operator (expression), not the stored-program CASE statement. MatrixOne does not support stored programs, so the stored-program CASE STATEMENT is unavailable; the CASE OPERATOR behaves compatibly. |
|
⚠️ Partial |
Returns a single active role name; MySQL 8.0 can return multiple comma-separated active roles or ‘NONE’. |
|
⚠️ Partial |
LOW_PRIORITY, QUICK, IGNORE modifiers are syntactically accepted but have no effect |
|
⚠️ Partial |
Modifiers LOW_PRIORITY / DELAYED / HIGH_PRIORITY not supported |
|
⚠️ Partial |
ON DUPLICATE KEY UPDATE only triggers on PRIMARY KEY conflicts; UNIQUE index conflicts are detected but result in errors (ERROR 1062 or ERROR 20102) rather than triggering ON DUPLICATE KEY UPDATE |
|
⚠️ Partial |
LOW_PRIORITY / DELAYED / HIGH_PRIORITY modifiers not supported |
|
✅ Full |
— |
|
⚠️ Partial |
Multi-row INSERT returns the last inserted auto-increment value; MySQL returns the first inserted value. |
|
🟣 MatrixOne-only |
[MO-only] LAST_QUERY_ID() |
|
⚠️ Partial |
SET clause only accepts columns_name = nullif(expr1, expr2) |
|
🟣 MatrixOne-only |
[MO-only] LOAD DATA INLINE (stage-sourced import) |
|
⚠️ Partial |
node-sql-parser rejects REPLACE … WHERE (parser bug, not MatrixOne) |
|
⚠️ Partial |
node-sql-parser rejects REPLACE … WHERE (parser bug, not MatrixOne) |
|
⚠️ Partial |
LOW_PRIORITY and IGNORE modifiers are syntactically accepted but have no effect |
|
⚠️ Partial |
INSERT IGNORE does not suppress NOT NULL or type-conversion errors (MySQL 8.0 does) |
Data Query Language (DQL)¶
Statement |
MySQL Compat |
Notes |
|---|---|---|
🟣 MatrixOne-only |
[MO-only] BY RANK WITH OPTION (IVF vector ranking) |
|
⚠️ Partial |
MINUS keyword is MO-specific; MySQL 8.0.31+ uses EXCEPT for the same set-difference semantics. MINUS ALL is not yet implemented in MO while MySQL 8.0.31+ supports EXCEPT ALL. |
|
✅ Full |
— |
|
🟣 MatrixOne-only |
[MO-only] CROSS APPLY (SQL Server-style, not in MySQL) |
|
✅ Full |
— |
|
⚠️ Partial |
LATERAL derived tables are not supported in MO (MySQL 8.0.14+ supports LATERAL for correlated subqueries in FROM clause) |
|
❌ None |
FULL JOIN with ON clause produces different errors on MO (missing FROM-clause entry) vs MySQL 8.0 (Unknown column in ON clause). FULL JOIN with USING returns INNER JOIN results on both (neither returns unmatched rows). FULL OUTER JOIN produces a syntax error on both. MySQL 8.0 does not natively support either FULL JOIN or FULL OUTER JOIN. |
|
✅ Full |
— |
|
⚠️ Partial |
INTERSECT was added in MySQL 8.0.31; MO INTERSECT and INTERSECT ALL semantics match MySQL 8.0 (both return identical results for common test cases including duplicate handling) |
|
⚠️ Partial |
FULL JOIN and FULL OUTER JOIN are not fully supported (FULL JOIN with ON produces errors, FULL JOIN with USING returns INNER JOIN results, FULL OUTER JOIN is a syntax error); MySQL 8.0 also does not support FULL JOIN/OUTER JOIN natively |
|
✅ Full |
— |
|
🟣 MatrixOne-only |
MINUS keyword is MO-specific; MySQL 8.0.31+ uses EXCEPT for the same set-difference semantics (MINUS is not a recognized keyword in MySQL) |
|
✅ Full |
— |
|
🟣 MatrixOne-only |
[MO-only] OUTER APPLY (SQL Server-style, not in MySQL) |
|
⚠️ Partial |
Overview page that includes FULL OUTER JOIN; neither MO nor MySQL 8.0 natively support FULL OUTER JOIN (MO produces syntax error, same as MySQL) |
|
✅ Full |
— |
|
⚠️ Partial |
SELECT … FOR UPDATE only supports single-table queries |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
⚠️ Partial |
Multi-column scalar subquery comparisons (e.g., WHERE (a,b) = (SELECT …)) are not supported; use multi-column IN instead |
|
⚠️ Partial |
UNION type coercion is strict: MO errors on incompatible types in UNION columns (e.g., INT vs VARCHAR), while MySQL 8.0 silently coerces (e.g., varchar to int converts to 0) |
|
⚠️ Partial |
Outer joins (LEFT JOIN, RIGHT JOIN, OUTER JOIN) are not allowed in recursive CTE members; MySQL 8.0 permits them except when the recursive CTE is on the right side of a LEFT JOIN (MySQL allows LEFT JOIN with CTE on the left side; MO rejects all outer joins in recursive CTEs regardless of position) |
Other¶
Statement |
MySQL Compat |
Notes |
|---|---|---|
⚠️ Partial |
DEALLOCATE PREPARE on a non-existent statement silently succeeds; MySQL returns ERROR 1243 (Unknown prepared statement handler). |
|
⚠️ Partial |
DESCRIBE/DESC output includes an extra |
|
✅ Full |
— |
|
⚠️ Partial |
Output format is a single QUERY PLAN column with tree-structured text (PostgreSQL-style); MySQL uses a multi-column tabular format with id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, Extra |
|
⚠️ Partial |
Output is a single QUERY PLAN column with tree-structured text; MySQL uses multi-column tabular EXPLAIN format |
|
🟣 MatrixOne-only |
[MO-only] EXPLAIN FORCE EXECUTE stmt_name [USING @var] is a MatrixOne extension; MySQL explains prepared statements through EXPLAIN FOR CONNECTION. |
|
⚠️ Partial |
Output format mirrors PostgreSQL (QUERY PLAN tree with Analyze sub-lines showing timeConsumed, waitTime, inputRows, outputRows, InputSize, OutputSize, MemorySize); MySQL 8.0 EXPLAIN ANALYZE uses TREE format with cost estimation and actual time in a different structure |
|
✅ Full |
— |
|
⚠️ Partial |
MatrixOne cannot PREPARE SET, DO, or other TCL/DCL statements |
|
⚠️ Partial |
Accepts a single role name only; MySQL 8.0 also supports NONE, DEFAULT, ALL, ALL EXCEPT role_list, and role lists. |
|
🟣 MatrixOne-only |
[MO-only] SHOW ACCOUNTS |
|
⚠️ Partial |
Only utf8mb4_bin is effective; other collations appear but are inert |
|
⚠️ Partial |
MO SHOW COLUMNS (without FULL) already includes the |
|
⚠️ Partial |
Output omits CHARACTER SET, COLLATE, and ENCRYPTION clauses present in MySQL 8.0 SHOW CREATE DATABASE output |
|
🟣 MatrixOne-only |
[MO-only] SHOW CREATE PUBLICATION |
|
⚠️ Partial |
Output reflects MatrixOne-specific extensions (CLUSTER BY, USING IVFFLAT/HNSW, etc.) |
|
⚠️ Partial |
DEFINER = user clause absent from output; SQL SECURITY {DEFINER|INVOKER} is emitted |
|
✅ Full |
— |
|
⚠️ Partial |
Lists MatrixOne SQL/Python functions; MySQL shows stored routines AND built-in sys schema functions (e.g. extract_schema_from_file_name, format_bytes) |
|
⚠️ Partial |
Grant syntax output is completely different: MO uses MO-specific format (GRANT create account ON account, GRANT table all ON table) instead of MySQL standard format (GRANT SELECT, INSERT, UPDATE, DELETE ON .) |
|
⚠️ Partial |
Reflects MatrixOne index model — secondary index rows appear but may not accelerate queries |
|
🟣 MatrixOne-only |
[MO-only] SHOW PITR |
|
⚠️ Partial |
MO returns 19 columns (node_id, conn_id, session_id, account, user, host, db, session_start, command, info, txn_id, statement_id, statement_type, query_type, sql_source_type, query_start, client_host, role, proxy_host) vs MySQL 8 columns (Id, User, Host, db, Command, Time, State, Info) |
|
🟣 MatrixOne-only |
[MO-only] SHOW PUBLICATIONS |
|
🟣 MatrixOne-only |
[MO-only] SHOW ROLES |
|
🟣 MatrixOne-only |
[MO-only] SHOW SEQUENCES |
|
🟣 MatrixOne-only |
[MO-only] SHOW STAGES |
|
🟣 MatrixOne-only |
[MO-only] SHOW SUBSCRIPTIONS |
|
⚠️ Partial |
Result columns differ from MySQL: MO has 19 cols (adds Role_id, Role_name; omits Version); MySQL has 18 cols (includes Version; no Role_id/Role_name) |
|
⚠️ Partial |
Output column header uses lowercase database name (Tables_in_ |
|
⚠️ Partial |
System variables are mostly syntactic stubs; actual behaviour differs from MySQL |
|
✅ Full |
— |
Functions¶
Status |
Count |
|---|---|
✅ Full |
103 |
⚠️ Partial |
26 |
🟣 MatrixOne-only |
35 |
Total |
164 |
Functions¶
Function |
MySQL Compat |
Notes |
|---|---|---|
🟣 MatrixOne-only |
[MO-only] Listing page (includes MatrixOne-only functions). |
Aggregate Functions¶
Function |
MySQL Compat |
Notes |
|---|---|---|
✅ Full |
— |
|
⚠️ Partial |
AVG() returns DOUBLE for all input types (MySQL returns DECIMAL for exact-value types) |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
🟣 MatrixOne-only |
[MO-only] BITMAP aggregates are MatrixOne extensions. |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
🟣 MatrixOne-only |
[MO-only] MEDIAN aggregate is a MatrixOne-specific aggregate (no native MySQL equivalent). |
|
✅ Full |
— |
|
✅ Full |
— |
|
⚠️ Partial |
SUM() returns the input integer type rather than DECIMAL for exact-value arguments (MySQL returns DECIMAL) |
|
✅ Full |
— |
|
✅ Full |
— |
Datetime¶
Function |
MySQL Compat |
Notes |
|---|---|---|
✅ Full |
— |
|
✅ Full |
— |
|
⚠️ Partial |
curdate()+int returns days since 1970-01-01 rather than coercing both sides to integer and adding like MySQL. |
|
✅ Full |
— |
|
✅ Full |
— |
|
⚠️ Partial |
Date literals accept only ‘yyyy-mm-dd’ and ‘yyyymmdd’ formats; MySQL accepts wider variants. |
|
⚠️ Partial |
Date literals accept only ‘yyyy-mm-dd’ and ‘yyyymmdd’ formats; MySQL accepts wider variants. |
|
⚠️ Partial |
Date literals accept only ‘yyyy-mm-dd’ and ‘yyyymmdd’ formats; MySQL accepts wider variants. |
|
⚠️ Partial |
Date literals accept only ‘yyyy-mm-dd’ and ‘yyyymmdd’ formats; MySQL accepts wider variants (yy-mm-dd, yy/mm/dd, yymmdd, etc.). |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
⚠️ Partial |
Date literals accept only ‘yyyy-mm-dd’ and ‘yyyymmdd’ formats; MySQL accepts wider variants. |
|
⚠️ Partial |
Date literals accept only ‘yyyy-mm-dd’ and ‘yyyymmdd’ formats; MySQL accepts wider variants. |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
⚠️ Partial |
MatrixOne TIMESTAMP range is ‘0001-01-01’–‘9999-12-31’ vs MySQL ‘1970-01-01’–‘2038-01-19’ (compat doc: Data Types). |
|
✅ Full |
— |
|
✅ Full |
— |
|
🟣 MatrixOne-only |
[MO-only] TO_DATE is a MatrixOne alias for MySQL STR_TO_DATE (compat doc: Date and Time Functions). MySQL’s own TO_DATE does not exist. |
|
⚠️ Partial |
Two-digit year handling differs: MatrixOne completes ‘08-10-07’ to year 0008; MySQL interprets it as 2008. |
|
⚠️ Partial |
Two-digit year handling differs: MatrixOne completes ‘08-10-07’ to year 0008; MySQL interprets it as 2008. |
|
⚠️ Partial |
Date literals accept only ‘yyyy-mm-dd’ and ‘yyyymmdd’ formats; MySQL accepts wider variants. |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
⚠️ Partial |
Date literals accept only ‘yyyy-mm-dd’ and ‘yyyymmdd’ formats; MySQL accepts wider variants. |
|
✅ Full |
— |
Json¶
Function |
MySQL Compat |
Notes |
|---|---|---|
🟣 MatrixOne-only |
[MO-only] MatrixOne integration of the jq JSON query language; no MySQL equivalent. |
|
✅ Full |
— |
|
🟣 MatrixOne-only |
[MO-only] MatrixOne convenience wrapper returning FLOAT64 directly. |
|
🟣 MatrixOne-only |
[MO-only] MatrixOne convenience wrapper returning a string result directly. |
|
✅ Full |
— |
|
✅ Full |
— |
|
🟣 MatrixOne-only |
[MO-only] MatrixOne-only; no MySQL equivalent. |
|
✅ Full |
— |
|
✅ Full |
— |
|
🟣 MatrixOne-only |
[MO-only] MatrixOne integration of the jq JSON query language; no MySQL equivalent. |
Mathematical¶
Function |
MySQL Compat |
Notes |
|---|---|---|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
⚠️ Partial |
MatrixOne supports an optional second decimals argument (FLOOR(number, decimals)) to specify decimal places; MySQL 8.0 only supports the single-argument form FLOOR(X) |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
⚠️ Partial |
RAND(seed) is not supported; calling RAND(N) with an integer argument produces ERROR 20203 |
|
✅ Full |
— |
|
✅ Full |
— |
|
🟣 MatrixOne-only |
[MO-only] MySQL 8.0 has no hyperbolic trigonometric functions; SINH() is a MatrixOne extension. |
|
✅ Full |
— |
Other¶
Function |
MySQL Compat |
Notes |
|---|---|---|
⚠️ Partial |
LOAD_FILE() takes a DATALINK value (file:// or stage:// URL) rather than MySQL’s plain filesystem path argument |
|
🟣 MatrixOne-only |
[MO-only] SAMPLE() is a MatrixOne sampling operator; no MySQL equivalent. |
|
🟣 MatrixOne-only |
[MO-only] SAVE_FILE() writes to a MatrixOne stage; no MySQL equivalent. |
|
🟣 MatrixOne-only |
[MO-only] SERIAL_EXTRACT() is a MatrixOne internal serial-column extractor. |
|
✅ Full |
— |
|
🟣 MatrixOne-only |
[MO-only] STAGE_LIST() — MO-specific stage management function (currently unimplemented, returns ERROR 20105) |
|
✅ Full |
— |
String¶
Function |
MySQL Compat |
Notes |
|---|---|---|
⚠️ Partial |
MatrixOne supports only aes-128-ecb and aes-256-cbc block modes; MySQL 8.0 also supports the full set of ECB/CBC/CFB/OFB variants at multiple key sizes. |
|
⚠️ Partial |
MatrixOne supports only aes-128-ecb and aes-256-cbc block modes; MySQL 8.0 also supports the full set of ECB/CBC/CFB/OFB variants at multiple key sizes. |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
⚠️ Partial |
— |
|
✅ Full |
— |
|
🟣 MatrixOne-only |
[MO-only] EMPTY() is a MatrixOne helper returning whether a string is empty. |
|
🟣 MatrixOne-only |
[MO-only] ENDSWITH() is a MatrixOne helper; MySQL has no direct equivalent. |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
⚠️ Partial |
FROM_BASE64() may include trailing null bytes in decoded output; MySQL strips them (e.g., FROM_BASE64(‘YQ==’) returns ‘a\0\0’ instead of ‘a’) |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
⚠️ Partial |
OCT(N) returns a numeric value rather than MySQL’s plain string representation |
|
⚠️ Partial |
match_type parameter not yet supported; passing it causes ERROR 20203 |
|
✅ Full |
— |
|
✅ Full |
— |
|
⚠️ Partial |
match_type parameter not yet supported; passing it causes ERROR 20203 |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
🟣 MatrixOne-only |
[MO-only] SPLIT_PART() is inherited from PostgreSQL; no MySQL equivalent. |
|
🟣 MatrixOne-only |
[MO-only] STARTSWITH() is a MatrixOne helper; MySQL has no direct equivalent. |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
System Operations¶
Function |
MySQL Compat |
Notes |
|---|---|---|
🟣 MatrixOne-only |
[MO-only] MatrixOne multi-account/role system management function (compat doc: System Management Functions). |
|
⚠️ Partial |
Returns a single active role name; MySQL 8.0 can return multiple comma-separated active roles or ‘NONE’. |
|
🟣 MatrixOne-only |
[MO-only] MatrixOne multi-account/role system management function (compat doc: System Management Functions). |
|
⚠️ Partial |
The host part may be returned as ‘localhost’ or the resolved client host rather than MySQL’s explicit ‘username@host’ format. |
|
🟣 MatrixOne-only |
[MO-only] MatrixOne multi-account/role system management function (compat doc: System Management Functions). |
|
✅ Full |
— |
Table¶
Function |
MySQL Compat |
Notes |
|---|---|---|
🟣 MatrixOne-only |
[MO-only] Table-valued function; no direct MySQL equivalent. |
|
🟣 MatrixOne-only |
[MO-only] Table-valued function; no direct MySQL equivalent. |
Vector¶
Function |
MySQL Compat |
Notes |
|---|---|---|
🟣 MatrixOne-only |
[MO-only] Vector type and related distance/norm/clustering functions are MatrixOne extensions (compat doc: Data Types — “MatrixOne supports vector types”). |
|
🟣 MatrixOne-only |
[MO-only] CLUSTER_CENTERS() — MO-specific vector clustering function (currently unimplemented, returns ERROR 20102) |
|
🟣 MatrixOne-only |
[MO-only] Vector type and related distance/norm/clustering functions are MatrixOne extensions (compat doc: Data Types — “MatrixOne supports vector types”). |
|
🟣 MatrixOne-only |
[MO-only] Vector type and related distance/norm/clustering functions are MatrixOne extensions (compat doc: Data Types — “MatrixOne supports vector types”). |
|
🟣 MatrixOne-only |
[MO-only] Vector type and related distance/norm/clustering functions are MatrixOne extensions (compat doc: Data Types — “MatrixOne supports vector types”). |
|
🟣 MatrixOne-only |
[MO-only] Vector type and related distance/norm/clustering functions are MatrixOne extensions (compat doc: Data Types — “MatrixOne supports vector types”). |
|
🟣 MatrixOne-only |
[MO-only] Vector type and related distance/norm/clustering functions are MatrixOne extensions (compat doc: Data Types — “MatrixOne supports vector types”). |
|
🟣 MatrixOne-only |
[MO-only] Vector type and related distance/norm/clustering functions are MatrixOne extensions (compat doc: Data Types — “MatrixOne supports vector types”). |
|
🟣 MatrixOne-only |
[MO-only] Vector type and related distance/norm/clustering functions are MatrixOne extensions (compat doc: Data Types — “MatrixOne supports vector types”). |
|
🟣 MatrixOne-only |
[MO-only] Vector type and related distance/norm/clustering functions are MatrixOne extensions (compat doc: Data Types — “MatrixOne supports vector types”). |
|
🟣 MatrixOne-only |
[MO-only] Vector type and related distance/norm/clustering functions are MatrixOne extensions (compat doc: Data Types — “MatrixOne supports vector types”). |
|
🟣 MatrixOne-only |
[MO-only] Vector type and related distance/norm/clustering functions are MatrixOne extensions (compat doc: Data Types — “MatrixOne supports vector types”). |
Window Functions¶
Function |
MySQL Compat |
Notes |
|---|---|---|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
✅ Full |
— |
Operators¶
Status |
Count |
|---|---|
✅ Full |
6 |
⚠️ Partial |
4 |
🟣 MatrixOne-only |
5 |
❓ Unknown |
47 |
Total |
62 |
Operators¶
Operator |
MySQL Compat |
Notes |
|---|---|---|
⚠️ Partial |
INTERVAL is internally implemented as a two-argument function rather than as a true SQL keyword; documented syntax INTERVAL(expr,unit) differs from MySQL’s INTERVAL expr unit keyword-style notation |
operators¶
Operator |
MySQL Compat |
Notes |
|---|---|---|
✅ Full |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
✅ Full |
— |
|
⚠️ Partial |
CAST(‘non-numeric’ AS SIGNED) raises an error instead of returning 0 or NULL (MySQL 8.0 returns 0 with a warning) |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
⚠️ Partial |
CONVERT(‘non-numeric’, SIGNED) raises an error instead of returning 0 or NULL |
|
🟣 MatrixOne-only |
[MO-only] DECODE() was deprecated in MySQL 5.7 and removed in MySQL 8.0; MatrixOne continues to support it |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
🟣 MatrixOne-only |
[MO-only] ENCODE() was deprecated in MySQL 5.7 and removed in MySQL 8.0; MatrixOne continues to support it |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
⚠️ Partial |
IF(NULL, expr2, expr3) raises an error instead of returning expr3 (MySQL 8.0 returns expr3) |
|
🟣 MatrixOne-only |
[MO-only] ILIKE operator for case-insensitive LIKE matching (PostgreSQL extension) |
|
✅ Full |
— |
|
❓ Unknown |
— |
|
✅ Full |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
✅ Full |
— |
|
✅ Full |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
|
🟣 MatrixOne-only |
[MO-only] SERIAL_FULL() is a MO-specific serialization function variant with NULL preservation, no MySQL 8.0 counterpart |
|
🟣 MatrixOne-only |
[MO-only] SERIAL() is a MO-specific serialization function with no MySQL 8.0 counterpart |
|
❓ Unknown |
— |
|
❓ Unknown |
— |
Data Types¶
Status |
Count |
|---|---|
✅ Full |
1 |
⚠️ Partial |
7 |
🟣 MatrixOne-only |
3 |
❓ Unknown |
1 |
Total |
12 |
Data Types¶
Data Type |
MySQL Compat |
Notes |
|---|---|---|
❓ Unknown |
— |
|
⚠️ Partial |
BOOLEAN → DECIMAL cast is not supported; other common conversions are supported |
|
⚠️ Partial |
TIMESTAMP range is 0001-01-01 to 9999-12-31 (MySQL: 1970-01-01 to 2038-01-19) |
|
🟣 MatrixOne-only |
[MO-only] DATALINK data type with STAGE integration, file:// and stage:// URL schemes |
|
⚠️ Partial |
— |
|
⚠️ Partial |
DECIMAL precision supports up to 65 digits via DECIMAL256 |
|
✅ Full |
— |
|
⚠️ Partial |
— |
|
🟣 MatrixOne-only |
[MO-only] UUID as a native column type (MySQL 8.0 has UUID() function only, no UUID column type) |
|
🟣 MatrixOne-only |
[MO-only] vecf32 and vecf64 vector data types for embedding storage and similarity search |
Date/Time Data Types¶
Data Type |
MySQL Compat |
Notes |
|---|---|---|
⚠️ Partial |
TIMESTAMP range is 0001-9999 (MySQL 8.0: 1970-2038); auto-initialization behavior near range boundaries may differ |
|
⚠️ Partial |
— |
Language Structure¶
Status |
Count |
|---|---|
⚠️ Partial |
2 |
Total |
2 |