[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-mariadb-oracle-to-mariadb":3,"mdc--rbrjpx-key":31,"related-org-mariadb-oracle-to-mariadb":2056,"related-repo-mariadb-oracle-to-mariadb":2154},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":26,"sourceUrl":29,"mdContent":30},"oracle-to-mariadb","migrate Oracle databases to MariaDB","Compatibility guide for developers migrating from Oracle Database to MariaDB. Use when migrating Oracle schemas, PL\u002FSQL procedures, or applications to MariaDB, when Oracle syntax causes unexpected behavior in MariaDB, or when evaluating MariaDB as an Oracle replacement. MariaDB is the only open source database with native PL\u002FSQL compatibility — MariaDB's sql_mode=ORACLE enables migration of approximately 80% of Oracle code without rewrites.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"mariadb","MariaDB","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmariadb.png",[12,14,17],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Database","database",{"name":18,"slug":19,"type":13},"Migration","migration",9,"https:\u002F\u002Fgithub.com\u002FMariaDB\u002Fskills","2026-07-13T06:14:11.069809",null,2,[],{"repoUrl":21,"stars":20,"forks":24,"topics":27,"description":28},[],"MariaDB skills for Claude Code and AI agents - because it is not MySQL","https:\u002F\u002Fgithub.com\u002FMariaDB\u002Fskills\u002Ftree\u002FHEAD\u002Foracle-to-mariadb","---\nname: oracle-to-mariadb\ndescription: \"Compatibility guide for developers migrating from Oracle Database to MariaDB. Use when migrating Oracle schemas, PL\u002FSQL procedures, or applications to MariaDB, when Oracle syntax causes unexpected behavior in MariaDB, or when evaluating MariaDB as an Oracle replacement. MariaDB is the only open source database with native PL\u002FSQL compatibility — MariaDB's sql_mode=ORACLE enables migration of approximately 80% of Oracle code without rewrites.\"\n---\n\n# Oracle to MariaDB Migration Guide\n\n*Last updated: 2026-06-04*\n\n## Why MariaDB for Oracle Migration\n\nMariaDB is the only open source database with native PL\u002FSQL compatibility. MySQL has no equivalent Oracle compatibility mode. PostgreSQL requires a complete PL\u002FSQL rewrite. MariaDB's `sql_mode=ORACLE` enables approximately 80% of Oracle code to run without modification — stored procedures, packages, cursors, exception handling, and Oracle-style functions included.\n\nAdditional advantages over other open source alternatives:\n- **Connect Storage Engine** — federate live Oracle data via ODBC during migration, without full cutover\n- **System-versioned tables** — match Oracle Flashback Archive for temporal data; unique among open source databases\n- **ColumnStore** — columnar analytics engine, comparable to Oracle's In-Memory ColumnStore\n- **Cost**: organizations typically achieve 70–90% cost reduction vs Oracle licensing\n\n> **Requires:** MariaDB Community Server 10.3+ for Oracle compatibility mode. 10.6+ for `ROWNUM`, `TO_CHAR()`, `ADD_MONTHS()`, `SYS_GUID()`. Current LTS is 11.8 (May 2025).\n\n## The First Step: Enable Oracle Compatibility Mode\n\n```sql\nSET sql_mode = 'ORACLE';\n-- or permanently in configuration:\n-- sql_mode = ORACLE\n```\n\nWithout this, PL\u002FSQL syntax, Oracle data type synonyms, and Oracle-style functions will not work. This is the single most important step and the most commonly missed.\n\n## What LLMs Get Wrong\n\n| What you might see | What's correct |\n|---|---|\n| PL\u002FSQL that fails with syntax errors | Set `sql_mode=ORACLE` first — without it, PL\u002FSQL constructs are not recognized |\n| Oracle `DATE` mapped to MariaDB `DATE` | Oracle `DATE` stores date AND time — map to `DATETIME`, not `DATE` |\n| Assuming 100% PL\u002FSQL compatibility | ~80% works without changes; `SYNONYM`, `INSERT ALL`, and `CONNECT BY` usually require rewrites — `(+)` joins work in Oracle mode on 12.1+ (see next row) |\n| `SYNONYM` usage in schema or code | No equivalent in MariaDB — replace with views or direct object references |\n| `(+)` outer join notation | Supported in Oracle mode since MariaDB 12.1 (MDEV-13817) — on older versions rewrite as `LEFT JOIN` \u002F `RIGHT JOIN` |\n| `START WITH ... CONNECT BY` | Not supported — rewrite as recursive CTE using `WITH RECURSIVE` |\n| `TIMESTAMP WITH TIME ZONE` | Loses timezone on migration — becomes `DATETIME`; handle timezone in application |\n\n## Data Type Mapping\n\n`sql_mode=ORACLE` handles these automatically:\n\n| Oracle | MariaDB | Notes |\n|---|---|---|\n| `VARCHAR2(n)` | `VARCHAR(n)` | Automatic |\n| `NUMBER(p,s)` | `DECIMAL(p,s)` | Automatic |\n| `NUMBER` | `DOUBLE` | Automatic |\n| `DATE` | `DATETIME` | **Automatic, but note:** Oracle DATE includes time; MariaDB DATE does not |\n| `CLOB` | `LONGTEXT` | Automatic |\n| `BLOB` | `LONGBLOB` | Automatic |\n| `RAW(n)` | `VARBINARY(n)` | Automatic |\n| `CHAR(n > 255)` | `VARCHAR(n)` | Manual |\n| `TIMESTAMP WITH TIME ZONE` | `DATETIME` | Manual — timezone info lost |\n| `BFILE` | `LONGBLOB` | Manual — file path storage differs |\n| `ROWID` | `CHAR(10)` | Manual |\n\n## What sql_mode=ORACLE Covers\n\n### PL\u002FSQL Syntax (10.3+)\n- Packages: `CREATE PACKAGE`, `CREATE PACKAGE BODY` — since 11.4 also work outside `sql_mode=ORACLE` (MDEV-10075), letting you use packages in mixed-mode codebases\n- Cursors: explicit, implicit, parameterized, `%ISOPEN`, `%ROWCOUNT`, `%FOUND`, `%NOTFOUND`\n- Cursors on prepared statements (12.3+)\n- Cursor variables: `TYPE ... IS REF CURSOR` (13.0+) — pass cursors as procedure parameters and return values\n- Pre-defined weak `SYS_REFCURSOR` (12.0+) — built-in cursor type, no `TYPE` declaration needed; `max_open_cursors` system variable caps concurrent open cursors\n- Variable types: `:=` assignment, `%TYPE`, `%ROWTYPE`\n- `ROW` data type as stored function return value (11.7+) — function returns a structured row, similar to Oracle row types\n- `RECORD` types in routine parameters and function `RETURN` clauses (13.0+)\n- Associative arrays: `DECLARE TYPE ... TABLE OF ... INDEX BY` (12.1+)\n- Stored routine parameters can have default values (11.8+) — call procedures with fewer arguments, like Oracle's `DEFAULT` clause\n- Control flow: `FOR i IN 1..10 LOOP`, `GOTO`, `EXIT WHEN`, `ELSIF`, `CONTINUE`\n- Exception handling: `EXCEPTION WHEN TOO_MANY_ROWS \u002F NO_DATA_FOUND \u002F DUP_VAL_ON_INDEX`\n- Anonymous blocks: `BEGIN ... END`\n- Dynamic SQL: `EXECUTE IMMEDIATE ... USING`\n- Trigger variables: `:NEW`, `:OLD`\n\n### Oracle-Compatible Functions\n| Function | Available Since |\n|---|---|\n| `DECODE()` | 10.3 |\n| `CHR()`, `SUBSTR()` with position 0 | 10.3 |\n| `ADD_MONTHS()` | 10.6 |\n| `TO_CHAR()` | 10.6 (FM padding-suppression format added in 12.0) |\n| `SYS_GUID()` | 10.6 |\n| `ROWNUM` | 10.6 |\n| `TO_NUMBER()` | 12.2.1 |\n| `TO_DATE()` | 12.3 (native; on older versions use `STR_TO_DATE()`) |\n| `TRUNC()` | 12.2 |\n\n### NULL Handling\nOracle treats empty strings as `NULL`. `sql_mode=ORACLE` does **not** activate this automatically — `EMPTY_STRING_IS_NULL` must be added separately:\n\n```sql\nSET sql_mode = 'ORACLE,EMPTY_STRING_IS_NULL';\n```\n\nWithout `EMPTY_STRING_IS_NULL`, `''` is not `NULL` in MariaDB even in Oracle mode.\n\n### Other Automatic Behaviors\n- `||` as string concatenation (NULL-ignoring)\n- `MINUS` as synonym for `EXCEPT` (10.6+)\n- Named placeholders (`:1`, `:2`) in prepared statements\n- `SELECT UNIQUE` as synonym for `SELECT DISTINCT`\n- `DUAL` table support\n\n## What Requires Manual Rewriting\n\nThese Oracle features have no direct equivalent and require code changes:\n\n- **`SYNONYM`** — replace with views (`CREATE VIEW`) or update object references directly\n- **`INSERT ALL` \u002F `INSERT FIRST`** — rewrite as multiple `INSERT` statements or application logic\n- **`(+)` outer join syntax** — supported natively since MariaDB 12.1 in Oracle mode. On older versions rewrite as `LEFT JOIN` \u002F `RIGHT JOIN`:\n  ```sql\n  -- Oracle:\n  SELECT * FROM a, b WHERE a.id = b.id(+);\n  -- MariaDB:\n  SELECT * FROM a LEFT JOIN b ON a.id = b.id;\n  ```\n- **`START WITH ... CONNECT BY`** — rewrite as recursive CTE:\n  ```sql\n  -- MariaDB equivalent:\n  WITH RECURSIVE tree AS (\n      SELECT id, parent_id, name FROM categories WHERE parent_id IS NULL\n      UNION ALL\n      SELECT c.id, c.parent_id, c.name FROM categories c\n      JOIN tree t ON c.parent_id = t.id\n  )\n  SELECT * FROM tree;\n  ```\n- **`TIMESTAMP WITH TIME ZONE`** — store timezone offset in a separate column or handle in application\n- **Object types and inheritance** — no equivalent; restructure as normalized tables\n\n## Migration Tools\n\n- **[MariaDB Migration Assessment Tool](https:\u002F\u002Fmariadb.com\u002Fresources\u002Fblog\u002Fmariadb-migration-assessment-tool-how-ready-are-you-to-migrate-to-mariadb-from-oracle\u002F)** — analyzes Oracle DDL export and scores compatibility before you start\n- **Connect Storage Engine** — create MariaDB tables that read live Oracle data via ODBC; useful for phased migration without full cutover\n- **DBeaver** — schema mapping, data comparison, and transfer between Oracle and MariaDB\n- **MaxScale query rewriting** — intercept and rewrite unsupported Oracle syntax on-the-fly for cases that can't be changed in the application\n\n## Key Gotchas\n\n- **Autocommit (commit model is reversed)**: Oracle has no `autocommit` variable and defaults to **manual commit** — an `INSERT`\u002F`UPDATE`\u002F`DELETE` is not durable until you run an explicit `COMMIT`. MariaDB is the opposite: `autocommit` is **ON** by default, so each statement commits immediately. To preserve Oracle's batch-then-commit behavior, wrap units of work in `START TRANSACTION ... COMMIT` or set `autocommit=0`. See Oracle's [Transactions](https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fdatabase\u002Foracle\u002Foracle-database\u002F21\u002Fcncpt\u002Ftransactions.html) concepts guide.\n- **`SYSDATE`**: In MariaDB Oracle mode, `SYSDATE` works but returns `DATETIME`. Verify date-only comparisons.\n- **`DUAL`**: Works in MariaDB but not identically — avoid schema-qualified references like `schema.DUAL`.\n- **Sequences**: `CREATE SEQUENCE` works in MariaDB 10.3+ with Oracle-compatible syntax (`MINVALUE`, `MAXVALUE`, `INCREMENT BY`).\n- **`DROP USER` with active sessions** (12.1+): Oracle-compatible behavior — in Oracle mode, `DROP USER` fails if the user has active sessions; in other modes, it issues a warning.\n- **~20% rewrite**: No tool achieves 100% Oracle-to-MariaDB conversion. Plan for manual review of complex PL\u002FSQL, object types, and unsupported syntax.\n\n## Sources\n\n- [sql_mode=ORACLE — MariaDB Docs](https:\u002F\u002Fmariadb.com\u002Fdocs\u002Frelease-notes\u002Fcommunity-server\u002Fabout\u002Fcompatibility-and-differences\u002Fsql_modeoracle)\n- [Oracle to MariaDB Migration — mariadb.com](https:\u002F\u002Fmariadb.com\u002Fmigrations\u002Foracle-to-mariadb\u002F)\n- [Easier Oracle to MariaDB Migrations with sql_mode and DBeaver — MariaDB Blog](https:\u002F\u002Fmariadb.com\u002Fresources\u002Fblog\u002Feasier-oracle-to-mariadb-migrations-with-sql_mode-and-dbeaver\u002F)\n- [Migration Assessment Tool — MariaDB Blog](https:\u002F\u002Fmariadb.com\u002Fresources\u002Fblog\u002Fmariadb-migration-assessment-tool-how-ready-are-you-to-migrate-to-mariadb-from-oracle\u002F)\n- [MariaDB vs PostgreSQL for Oracle Migration — mariadb.com](https:\u002F\u002Fmariadb.com\u002Fproducts\u002Fenterprise\u002Fcomparison\u002Fmariadb-vs-postgresql\u002F)\n- [Migration from Oracle to MariaDB Deep Dive — Severalnines](https:\u002F\u002Fseveralnines.com\u002Fblog\u002Fmigration-oracle-database-mariadb-deep-dive\u002F)\n- [Data migration from Oracle to MariaDB with Connect SE — mariadb.org](https:\u002F\u002Fmariadb.org\u002Fdata-migration-from-oracle-to-mariadb-with-docker-and-connect-se-a-step-by-step-guide\u002F)\n\n*For topics not covered here, see the official MariaDB documentation at [mariadb.com\u002Fdocs](https:\u002F\u002Fmariadb.com\u002Fdocs).*\n",{"data":32,"body":33},{"name":4,"description":6},{"type":34,"children":35},"root",[36,45,55,62,76,81,127,171,177,216,221,227,461,467,477,782,788,795,1076,1082,1267,1273,1308,1322,1348,1354,1434,1440,1445,1676,1682,1731,1737,1956,1962,2034,2050],{"type":37,"tag":38,"props":39,"children":41},"element","h1",{"id":40},"oracle-to-mariadb-migration-guide",[42],{"type":43,"value":44},"text","Oracle to MariaDB Migration Guide",{"type":37,"tag":46,"props":47,"children":48},"p",{},[49],{"type":37,"tag":50,"props":51,"children":52},"em",{},[53],{"type":43,"value":54},"Last updated: 2026-06-04",{"type":37,"tag":56,"props":57,"children":59},"h2",{"id":58},"why-mariadb-for-oracle-migration",[60],{"type":43,"value":61},"Why MariaDB for Oracle Migration",{"type":37,"tag":46,"props":63,"children":64},{},[65,67,74],{"type":43,"value":66},"MariaDB is the only open source database with native PL\u002FSQL compatibility. MySQL has no equivalent Oracle compatibility mode. PostgreSQL requires a complete PL\u002FSQL rewrite. MariaDB's ",{"type":37,"tag":68,"props":69,"children":71},"code",{"className":70},[],[72],{"type":43,"value":73},"sql_mode=ORACLE",{"type":43,"value":75}," enables approximately 80% of Oracle code to run without modification — stored procedures, packages, cursors, exception handling, and Oracle-style functions included.",{"type":37,"tag":46,"props":77,"children":78},{},[79],{"type":43,"value":80},"Additional advantages over other open source alternatives:",{"type":37,"tag":82,"props":83,"children":84},"ul",{},[85,97,107,117],{"type":37,"tag":86,"props":87,"children":88},"li",{},[89,95],{"type":37,"tag":90,"props":91,"children":92},"strong",{},[93],{"type":43,"value":94},"Connect Storage Engine",{"type":43,"value":96}," — federate live Oracle data via ODBC during migration, without full cutover",{"type":37,"tag":86,"props":98,"children":99},{},[100,105],{"type":37,"tag":90,"props":101,"children":102},{},[103],{"type":43,"value":104},"System-versioned tables",{"type":43,"value":106}," — match Oracle Flashback Archive for temporal data; unique among open source databases",{"type":37,"tag":86,"props":108,"children":109},{},[110,115],{"type":37,"tag":90,"props":111,"children":112},{},[113],{"type":43,"value":114},"ColumnStore",{"type":43,"value":116}," — columnar analytics engine, comparable to Oracle's In-Memory ColumnStore",{"type":37,"tag":86,"props":118,"children":119},{},[120,125],{"type":37,"tag":90,"props":121,"children":122},{},[123],{"type":43,"value":124},"Cost",{"type":43,"value":126},": organizations typically achieve 70–90% cost reduction vs Oracle licensing",{"type":37,"tag":128,"props":129,"children":130},"blockquote",{},[131],{"type":37,"tag":46,"props":132,"children":133},{},[134,139,141,147,149,155,156,162,163,169],{"type":37,"tag":90,"props":135,"children":136},{},[137],{"type":43,"value":138},"Requires:",{"type":43,"value":140}," MariaDB Community Server 10.3+ for Oracle compatibility mode. 10.6+ for ",{"type":37,"tag":68,"props":142,"children":144},{"className":143},[],[145],{"type":43,"value":146},"ROWNUM",{"type":43,"value":148},", ",{"type":37,"tag":68,"props":150,"children":152},{"className":151},[],[153],{"type":43,"value":154},"TO_CHAR()",{"type":43,"value":148},{"type":37,"tag":68,"props":157,"children":159},{"className":158},[],[160],{"type":43,"value":161},"ADD_MONTHS()",{"type":43,"value":148},{"type":37,"tag":68,"props":164,"children":166},{"className":165},[],[167],{"type":43,"value":168},"SYS_GUID()",{"type":43,"value":170},". Current LTS is 11.8 (May 2025).",{"type":37,"tag":56,"props":172,"children":174},{"id":173},"the-first-step-enable-oracle-compatibility-mode",[175],{"type":43,"value":176},"The First Step: Enable Oracle Compatibility Mode",{"type":37,"tag":178,"props":179,"children":184},"pre",{"className":180,"code":181,"language":182,"meta":183,"style":183},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","SET sql_mode = 'ORACLE';\n-- or permanently in configuration:\n-- sql_mode = ORACLE\n","sql","",[185],{"type":37,"tag":68,"props":186,"children":187},{"__ignoreMap":183},[188,199,207],{"type":37,"tag":189,"props":190,"children":193},"span",{"class":191,"line":192},"line",1,[194],{"type":37,"tag":189,"props":195,"children":196},{},[197],{"type":43,"value":198},"SET sql_mode = 'ORACLE';\n",{"type":37,"tag":189,"props":200,"children":201},{"class":191,"line":24},[202],{"type":37,"tag":189,"props":203,"children":204},{},[205],{"type":43,"value":206},"-- or permanently in configuration:\n",{"type":37,"tag":189,"props":208,"children":210},{"class":191,"line":209},3,[211],{"type":37,"tag":189,"props":212,"children":213},{},[214],{"type":43,"value":215},"-- sql_mode = ORACLE\n",{"type":37,"tag":46,"props":217,"children":218},{},[219],{"type":43,"value":220},"Without this, PL\u002FSQL syntax, Oracle data type synonyms, and Oracle-style functions will not work. This is the single most important step and the most commonly missed.",{"type":37,"tag":56,"props":222,"children":224},{"id":223},"what-llms-get-wrong",[225],{"type":43,"value":226},"What LLMs Get Wrong",{"type":37,"tag":228,"props":229,"children":230},"table",{},[231,250],{"type":37,"tag":232,"props":233,"children":234},"thead",{},[235],{"type":37,"tag":236,"props":237,"children":238},"tr",{},[239,245],{"type":37,"tag":240,"props":241,"children":242},"th",{},[243],{"type":43,"value":244},"What you might see",{"type":37,"tag":240,"props":246,"children":247},{},[248],{"type":43,"value":249},"What's correct",{"type":37,"tag":251,"props":252,"children":253},"tbody",{},[254,275,320,364,382,414,437],{"type":37,"tag":236,"props":255,"children":256},{},[257,263],{"type":37,"tag":258,"props":259,"children":260},"td",{},[261],{"type":43,"value":262},"PL\u002FSQL that fails with syntax errors",{"type":37,"tag":258,"props":264,"children":265},{},[266,268,273],{"type":43,"value":267},"Set ",{"type":37,"tag":68,"props":269,"children":271},{"className":270},[],[272],{"type":43,"value":73},{"type":43,"value":274}," first — without it, PL\u002FSQL constructs are not recognized",{"type":37,"tag":236,"props":276,"children":277},{},[278,296],{"type":37,"tag":258,"props":279,"children":280},{},[281,283,289,291],{"type":43,"value":282},"Oracle ",{"type":37,"tag":68,"props":284,"children":286},{"className":285},[],[287],{"type":43,"value":288},"DATE",{"type":43,"value":290}," mapped to MariaDB ",{"type":37,"tag":68,"props":292,"children":294},{"className":293},[],[295],{"type":43,"value":288},{"type":37,"tag":258,"props":297,"children":298},{},[299,300,305,307,313,315],{"type":43,"value":282},{"type":37,"tag":68,"props":301,"children":303},{"className":302},[],[304],{"type":43,"value":288},{"type":43,"value":306}," stores date AND time — map to ",{"type":37,"tag":68,"props":308,"children":310},{"className":309},[],[311],{"type":43,"value":312},"DATETIME",{"type":43,"value":314},", not ",{"type":37,"tag":68,"props":316,"children":318},{"className":317},[],[319],{"type":43,"value":288},{"type":37,"tag":236,"props":321,"children":322},{},[323,328],{"type":37,"tag":258,"props":324,"children":325},{},[326],{"type":43,"value":327},"Assuming 100% PL\u002FSQL compatibility",{"type":37,"tag":258,"props":329,"children":330},{},[331,333,339,340,346,348,354,356,362],{"type":43,"value":332},"~80% works without changes; ",{"type":37,"tag":68,"props":334,"children":336},{"className":335},[],[337],{"type":43,"value":338},"SYNONYM",{"type":43,"value":148},{"type":37,"tag":68,"props":341,"children":343},{"className":342},[],[344],{"type":43,"value":345},"INSERT ALL",{"type":43,"value":347},", and ",{"type":37,"tag":68,"props":349,"children":351},{"className":350},[],[352],{"type":43,"value":353},"CONNECT BY",{"type":43,"value":355}," usually require rewrites — ",{"type":37,"tag":68,"props":357,"children":359},{"className":358},[],[360],{"type":43,"value":361},"(+)",{"type":43,"value":363}," joins work in Oracle mode on 12.1+ (see next row)",{"type":37,"tag":236,"props":365,"children":366},{},[367,377],{"type":37,"tag":258,"props":368,"children":369},{},[370,375],{"type":37,"tag":68,"props":371,"children":373},{"className":372},[],[374],{"type":43,"value":338},{"type":43,"value":376}," usage in schema or code",{"type":37,"tag":258,"props":378,"children":379},{},[380],{"type":43,"value":381},"No equivalent in MariaDB — replace with views or direct object references",{"type":37,"tag":236,"props":383,"children":384},{},[385,395],{"type":37,"tag":258,"props":386,"children":387},{},[388,393],{"type":37,"tag":68,"props":389,"children":391},{"className":390},[],[392],{"type":43,"value":361},{"type":43,"value":394}," outer join notation",{"type":37,"tag":258,"props":396,"children":397},{},[398,400,406,408],{"type":43,"value":399},"Supported in Oracle mode since MariaDB 12.1 (MDEV-13817) — on older versions rewrite as ",{"type":37,"tag":68,"props":401,"children":403},{"className":402},[],[404],{"type":43,"value":405},"LEFT JOIN",{"type":43,"value":407}," \u002F ",{"type":37,"tag":68,"props":409,"children":411},{"className":410},[],[412],{"type":43,"value":413},"RIGHT JOIN",{"type":37,"tag":236,"props":415,"children":416},{},[417,426],{"type":37,"tag":258,"props":418,"children":419},{},[420],{"type":37,"tag":68,"props":421,"children":423},{"className":422},[],[424],{"type":43,"value":425},"START WITH ... CONNECT BY",{"type":37,"tag":258,"props":427,"children":428},{},[429,431],{"type":43,"value":430},"Not supported — rewrite as recursive CTE using ",{"type":37,"tag":68,"props":432,"children":434},{"className":433},[],[435],{"type":43,"value":436},"WITH RECURSIVE",{"type":37,"tag":236,"props":438,"children":439},{},[440,449],{"type":37,"tag":258,"props":441,"children":442},{},[443],{"type":37,"tag":68,"props":444,"children":446},{"className":445},[],[447],{"type":43,"value":448},"TIMESTAMP WITH TIME ZONE",{"type":37,"tag":258,"props":450,"children":451},{},[452,454,459],{"type":43,"value":453},"Loses timezone on migration — becomes ",{"type":37,"tag":68,"props":455,"children":457},{"className":456},[],[458],{"type":43,"value":312},{"type":43,"value":460},"; handle timezone in application",{"type":37,"tag":56,"props":462,"children":464},{"id":463},"data-type-mapping",[465],{"type":43,"value":466},"Data Type Mapping",{"type":37,"tag":46,"props":468,"children":469},{},[470,475],{"type":37,"tag":68,"props":471,"children":473},{"className":472},[],[474],{"type":43,"value":73},{"type":43,"value":476}," handles these automatically:",{"type":37,"tag":228,"props":478,"children":479},{},[480,500],{"type":37,"tag":232,"props":481,"children":482},{},[483],{"type":37,"tag":236,"props":484,"children":485},{},[486,491,495],{"type":37,"tag":240,"props":487,"children":488},{},[489],{"type":43,"value":490},"Oracle",{"type":37,"tag":240,"props":492,"children":493},{},[494],{"type":43,"value":9},{"type":37,"tag":240,"props":496,"children":497},{},[498],{"type":43,"value":499},"Notes",{"type":37,"tag":251,"props":501,"children":502},{},[503,529,554,579,608,633,658,683,708,732,757],{"type":37,"tag":236,"props":504,"children":505},{},[506,515,524],{"type":37,"tag":258,"props":507,"children":508},{},[509],{"type":37,"tag":68,"props":510,"children":512},{"className":511},[],[513],{"type":43,"value":514},"VARCHAR2(n)",{"type":37,"tag":258,"props":516,"children":517},{},[518],{"type":37,"tag":68,"props":519,"children":521},{"className":520},[],[522],{"type":43,"value":523},"VARCHAR(n)",{"type":37,"tag":258,"props":525,"children":526},{},[527],{"type":43,"value":528},"Automatic",{"type":37,"tag":236,"props":530,"children":531},{},[532,541,550],{"type":37,"tag":258,"props":533,"children":534},{},[535],{"type":37,"tag":68,"props":536,"children":538},{"className":537},[],[539],{"type":43,"value":540},"NUMBER(p,s)",{"type":37,"tag":258,"props":542,"children":543},{},[544],{"type":37,"tag":68,"props":545,"children":547},{"className":546},[],[548],{"type":43,"value":549},"DECIMAL(p,s)",{"type":37,"tag":258,"props":551,"children":552},{},[553],{"type":43,"value":528},{"type":37,"tag":236,"props":555,"children":556},{},[557,566,575],{"type":37,"tag":258,"props":558,"children":559},{},[560],{"type":37,"tag":68,"props":561,"children":563},{"className":562},[],[564],{"type":43,"value":565},"NUMBER",{"type":37,"tag":258,"props":567,"children":568},{},[569],{"type":37,"tag":68,"props":570,"children":572},{"className":571},[],[573],{"type":43,"value":574},"DOUBLE",{"type":37,"tag":258,"props":576,"children":577},{},[578],{"type":43,"value":528},{"type":37,"tag":236,"props":580,"children":581},{},[582,590,598],{"type":37,"tag":258,"props":583,"children":584},{},[585],{"type":37,"tag":68,"props":586,"children":588},{"className":587},[],[589],{"type":43,"value":288},{"type":37,"tag":258,"props":591,"children":592},{},[593],{"type":37,"tag":68,"props":594,"children":596},{"className":595},[],[597],{"type":43,"value":312},{"type":37,"tag":258,"props":599,"children":600},{},[601,606],{"type":37,"tag":90,"props":602,"children":603},{},[604],{"type":43,"value":605},"Automatic, but note:",{"type":43,"value":607}," Oracle DATE includes time; MariaDB DATE does not",{"type":37,"tag":236,"props":609,"children":610},{},[611,620,629],{"type":37,"tag":258,"props":612,"children":613},{},[614],{"type":37,"tag":68,"props":615,"children":617},{"className":616},[],[618],{"type":43,"value":619},"CLOB",{"type":37,"tag":258,"props":621,"children":622},{},[623],{"type":37,"tag":68,"props":624,"children":626},{"className":625},[],[627],{"type":43,"value":628},"LONGTEXT",{"type":37,"tag":258,"props":630,"children":631},{},[632],{"type":43,"value":528},{"type":37,"tag":236,"props":634,"children":635},{},[636,645,654],{"type":37,"tag":258,"props":637,"children":638},{},[639],{"type":37,"tag":68,"props":640,"children":642},{"className":641},[],[643],{"type":43,"value":644},"BLOB",{"type":37,"tag":258,"props":646,"children":647},{},[648],{"type":37,"tag":68,"props":649,"children":651},{"className":650},[],[652],{"type":43,"value":653},"LONGBLOB",{"type":37,"tag":258,"props":655,"children":656},{},[657],{"type":43,"value":528},{"type":37,"tag":236,"props":659,"children":660},{},[661,670,679],{"type":37,"tag":258,"props":662,"children":663},{},[664],{"type":37,"tag":68,"props":665,"children":667},{"className":666},[],[668],{"type":43,"value":669},"RAW(n)",{"type":37,"tag":258,"props":671,"children":672},{},[673],{"type":37,"tag":68,"props":674,"children":676},{"className":675},[],[677],{"type":43,"value":678},"VARBINARY(n)",{"type":37,"tag":258,"props":680,"children":681},{},[682],{"type":43,"value":528},{"type":37,"tag":236,"props":684,"children":685},{},[686,695,703],{"type":37,"tag":258,"props":687,"children":688},{},[689],{"type":37,"tag":68,"props":690,"children":692},{"className":691},[],[693],{"type":43,"value":694},"CHAR(n > 255)",{"type":37,"tag":258,"props":696,"children":697},{},[698],{"type":37,"tag":68,"props":699,"children":701},{"className":700},[],[702],{"type":43,"value":523},{"type":37,"tag":258,"props":704,"children":705},{},[706],{"type":43,"value":707},"Manual",{"type":37,"tag":236,"props":709,"children":710},{},[711,719,727],{"type":37,"tag":258,"props":712,"children":713},{},[714],{"type":37,"tag":68,"props":715,"children":717},{"className":716},[],[718],{"type":43,"value":448},{"type":37,"tag":258,"props":720,"children":721},{},[722],{"type":37,"tag":68,"props":723,"children":725},{"className":724},[],[726],{"type":43,"value":312},{"type":37,"tag":258,"props":728,"children":729},{},[730],{"type":43,"value":731},"Manual — timezone info lost",{"type":37,"tag":236,"props":733,"children":734},{},[735,744,752],{"type":37,"tag":258,"props":736,"children":737},{},[738],{"type":37,"tag":68,"props":739,"children":741},{"className":740},[],[742],{"type":43,"value":743},"BFILE",{"type":37,"tag":258,"props":745,"children":746},{},[747],{"type":37,"tag":68,"props":748,"children":750},{"className":749},[],[751],{"type":43,"value":653},{"type":37,"tag":258,"props":753,"children":754},{},[755],{"type":43,"value":756},"Manual — file path storage differs",{"type":37,"tag":236,"props":758,"children":759},{},[760,769,778],{"type":37,"tag":258,"props":761,"children":762},{},[763],{"type":37,"tag":68,"props":764,"children":766},{"className":765},[],[767],{"type":43,"value":768},"ROWID",{"type":37,"tag":258,"props":770,"children":771},{},[772],{"type":37,"tag":68,"props":773,"children":775},{"className":774},[],[776],{"type":43,"value":777},"CHAR(10)",{"type":37,"tag":258,"props":779,"children":780},{},[781],{"type":43,"value":707},{"type":37,"tag":56,"props":783,"children":785},{"id":784},"what-sql_modeoracle-covers",[786],{"type":43,"value":787},"What sql_mode=ORACLE Covers",{"type":37,"tag":789,"props":790,"children":792},"h3",{"id":791},"plsql-syntax-103",[793],{"type":43,"value":794},"PL\u002FSQL Syntax (10.3+)",{"type":37,"tag":82,"props":796,"children":797},{},[798,825,857,862,875,904,930,941,960,973,986,1025,1036,1047,1058],{"type":37,"tag":86,"props":799,"children":800},{},[801,803,809,810,816,818,823],{"type":43,"value":802},"Packages: ",{"type":37,"tag":68,"props":804,"children":806},{"className":805},[],[807],{"type":43,"value":808},"CREATE PACKAGE",{"type":43,"value":148},{"type":37,"tag":68,"props":811,"children":813},{"className":812},[],[814],{"type":43,"value":815},"CREATE PACKAGE BODY",{"type":43,"value":817}," — since 11.4 also work outside ",{"type":37,"tag":68,"props":819,"children":821},{"className":820},[],[822],{"type":43,"value":73},{"type":43,"value":824}," (MDEV-10075), letting you use packages in mixed-mode codebases",{"type":37,"tag":86,"props":826,"children":827},{},[828,830,836,837,843,844,850,851],{"type":43,"value":829},"Cursors: explicit, implicit, parameterized, ",{"type":37,"tag":68,"props":831,"children":833},{"className":832},[],[834],{"type":43,"value":835},"%ISOPEN",{"type":43,"value":148},{"type":37,"tag":68,"props":838,"children":840},{"className":839},[],[841],{"type":43,"value":842},"%ROWCOUNT",{"type":43,"value":148},{"type":37,"tag":68,"props":845,"children":847},{"className":846},[],[848],{"type":43,"value":849},"%FOUND",{"type":43,"value":148},{"type":37,"tag":68,"props":852,"children":854},{"className":853},[],[855],{"type":43,"value":856},"%NOTFOUND",{"type":37,"tag":86,"props":858,"children":859},{},[860],{"type":43,"value":861},"Cursors on prepared statements (12.3+)",{"type":37,"tag":86,"props":863,"children":864},{},[865,867,873],{"type":43,"value":866},"Cursor variables: ",{"type":37,"tag":68,"props":868,"children":870},{"className":869},[],[871],{"type":43,"value":872},"TYPE ... IS REF CURSOR",{"type":43,"value":874}," (13.0+) — pass cursors as procedure parameters and return values",{"type":37,"tag":86,"props":876,"children":877},{},[878,880,886,888,894,896,902],{"type":43,"value":879},"Pre-defined weak ",{"type":37,"tag":68,"props":881,"children":883},{"className":882},[],[884],{"type":43,"value":885},"SYS_REFCURSOR",{"type":43,"value":887}," (12.0+) — built-in cursor type, no ",{"type":37,"tag":68,"props":889,"children":891},{"className":890},[],[892],{"type":43,"value":893},"TYPE",{"type":43,"value":895}," declaration needed; ",{"type":37,"tag":68,"props":897,"children":899},{"className":898},[],[900],{"type":43,"value":901},"max_open_cursors",{"type":43,"value":903}," system variable caps concurrent open cursors",{"type":37,"tag":86,"props":905,"children":906},{},[907,909,915,917,923,924],{"type":43,"value":908},"Variable types: ",{"type":37,"tag":68,"props":910,"children":912},{"className":911},[],[913],{"type":43,"value":914},":=",{"type":43,"value":916}," assignment, ",{"type":37,"tag":68,"props":918,"children":920},{"className":919},[],[921],{"type":43,"value":922},"%TYPE",{"type":43,"value":148},{"type":37,"tag":68,"props":925,"children":927},{"className":926},[],[928],{"type":43,"value":929},"%ROWTYPE",{"type":37,"tag":86,"props":931,"children":932},{},[933,939],{"type":37,"tag":68,"props":934,"children":936},{"className":935},[],[937],{"type":43,"value":938},"ROW",{"type":43,"value":940}," data type as stored function return value (11.7+) — function returns a structured row, similar to Oracle row types",{"type":37,"tag":86,"props":942,"children":943},{},[944,950,952,958],{"type":37,"tag":68,"props":945,"children":947},{"className":946},[],[948],{"type":43,"value":949},"RECORD",{"type":43,"value":951}," types in routine parameters and function ",{"type":37,"tag":68,"props":953,"children":955},{"className":954},[],[956],{"type":43,"value":957},"RETURN",{"type":43,"value":959}," clauses (13.0+)",{"type":37,"tag":86,"props":961,"children":962},{},[963,965,971],{"type":43,"value":964},"Associative arrays: ",{"type":37,"tag":68,"props":966,"children":968},{"className":967},[],[969],{"type":43,"value":970},"DECLARE TYPE ... TABLE OF ... INDEX BY",{"type":43,"value":972}," (12.1+)",{"type":37,"tag":86,"props":974,"children":975},{},[976,978,984],{"type":43,"value":977},"Stored routine parameters can have default values (11.8+) — call procedures with fewer arguments, like Oracle's ",{"type":37,"tag":68,"props":979,"children":981},{"className":980},[],[982],{"type":43,"value":983},"DEFAULT",{"type":43,"value":985}," clause",{"type":37,"tag":86,"props":987,"children":988},{},[989,991,997,998,1004,1005,1011,1012,1018,1019],{"type":43,"value":990},"Control flow: ",{"type":37,"tag":68,"props":992,"children":994},{"className":993},[],[995],{"type":43,"value":996},"FOR i IN 1..10 LOOP",{"type":43,"value":148},{"type":37,"tag":68,"props":999,"children":1001},{"className":1000},[],[1002],{"type":43,"value":1003},"GOTO",{"type":43,"value":148},{"type":37,"tag":68,"props":1006,"children":1008},{"className":1007},[],[1009],{"type":43,"value":1010},"EXIT WHEN",{"type":43,"value":148},{"type":37,"tag":68,"props":1013,"children":1015},{"className":1014},[],[1016],{"type":43,"value":1017},"ELSIF",{"type":43,"value":148},{"type":37,"tag":68,"props":1020,"children":1022},{"className":1021},[],[1023],{"type":43,"value":1024},"CONTINUE",{"type":37,"tag":86,"props":1026,"children":1027},{},[1028,1030],{"type":43,"value":1029},"Exception handling: ",{"type":37,"tag":68,"props":1031,"children":1033},{"className":1032},[],[1034],{"type":43,"value":1035},"EXCEPTION WHEN TOO_MANY_ROWS \u002F NO_DATA_FOUND \u002F DUP_VAL_ON_INDEX",{"type":37,"tag":86,"props":1037,"children":1038},{},[1039,1041],{"type":43,"value":1040},"Anonymous blocks: ",{"type":37,"tag":68,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":43,"value":1046},"BEGIN ... END",{"type":37,"tag":86,"props":1048,"children":1049},{},[1050,1052],{"type":43,"value":1051},"Dynamic SQL: ",{"type":37,"tag":68,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":43,"value":1057},"EXECUTE IMMEDIATE ... USING",{"type":37,"tag":86,"props":1059,"children":1060},{},[1061,1063,1069,1070],{"type":43,"value":1062},"Trigger variables: ",{"type":37,"tag":68,"props":1064,"children":1066},{"className":1065},[],[1067],{"type":43,"value":1068},":NEW",{"type":43,"value":148},{"type":37,"tag":68,"props":1071,"children":1073},{"className":1072},[],[1074],{"type":43,"value":1075},":OLD",{"type":37,"tag":789,"props":1077,"children":1079},{"id":1078},"oracle-compatible-functions",[1080],{"type":43,"value":1081},"Oracle-Compatible Functions",{"type":37,"tag":228,"props":1083,"children":1084},{},[1085,1101],{"type":37,"tag":232,"props":1086,"children":1087},{},[1088],{"type":37,"tag":236,"props":1089,"children":1090},{},[1091,1096],{"type":37,"tag":240,"props":1092,"children":1093},{},[1094],{"type":43,"value":1095},"Function",{"type":37,"tag":240,"props":1097,"children":1098},{},[1099],{"type":43,"value":1100},"Available Since",{"type":37,"tag":251,"props":1102,"children":1103},{},[1104,1121,1146,1162,1178,1193,1208,1225,1250],{"type":37,"tag":236,"props":1105,"children":1106},{},[1107,1116],{"type":37,"tag":258,"props":1108,"children":1109},{},[1110],{"type":37,"tag":68,"props":1111,"children":1113},{"className":1112},[],[1114],{"type":43,"value":1115},"DECODE()",{"type":37,"tag":258,"props":1117,"children":1118},{},[1119],{"type":43,"value":1120},"10.3",{"type":37,"tag":236,"props":1122,"children":1123},{},[1124,1142],{"type":37,"tag":258,"props":1125,"children":1126},{},[1127,1133,1134,1140],{"type":37,"tag":68,"props":1128,"children":1130},{"className":1129},[],[1131],{"type":43,"value":1132},"CHR()",{"type":43,"value":148},{"type":37,"tag":68,"props":1135,"children":1137},{"className":1136},[],[1138],{"type":43,"value":1139},"SUBSTR()",{"type":43,"value":1141}," with position 0",{"type":37,"tag":258,"props":1143,"children":1144},{},[1145],{"type":43,"value":1120},{"type":37,"tag":236,"props":1147,"children":1148},{},[1149,1157],{"type":37,"tag":258,"props":1150,"children":1151},{},[1152],{"type":37,"tag":68,"props":1153,"children":1155},{"className":1154},[],[1156],{"type":43,"value":161},{"type":37,"tag":258,"props":1158,"children":1159},{},[1160],{"type":43,"value":1161},"10.6",{"type":37,"tag":236,"props":1163,"children":1164},{},[1165,1173],{"type":37,"tag":258,"props":1166,"children":1167},{},[1168],{"type":37,"tag":68,"props":1169,"children":1171},{"className":1170},[],[1172],{"type":43,"value":154},{"type":37,"tag":258,"props":1174,"children":1175},{},[1176],{"type":43,"value":1177},"10.6 (FM padding-suppression format added in 12.0)",{"type":37,"tag":236,"props":1179,"children":1180},{},[1181,1189],{"type":37,"tag":258,"props":1182,"children":1183},{},[1184],{"type":37,"tag":68,"props":1185,"children":1187},{"className":1186},[],[1188],{"type":43,"value":168},{"type":37,"tag":258,"props":1190,"children":1191},{},[1192],{"type":43,"value":1161},{"type":37,"tag":236,"props":1194,"children":1195},{},[1196,1204],{"type":37,"tag":258,"props":1197,"children":1198},{},[1199],{"type":37,"tag":68,"props":1200,"children":1202},{"className":1201},[],[1203],{"type":43,"value":146},{"type":37,"tag":258,"props":1205,"children":1206},{},[1207],{"type":43,"value":1161},{"type":37,"tag":236,"props":1209,"children":1210},{},[1211,1220],{"type":37,"tag":258,"props":1212,"children":1213},{},[1214],{"type":37,"tag":68,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":43,"value":1219},"TO_NUMBER()",{"type":37,"tag":258,"props":1221,"children":1222},{},[1223],{"type":43,"value":1224},"12.2.1",{"type":37,"tag":236,"props":1226,"children":1227},{},[1228,1237],{"type":37,"tag":258,"props":1229,"children":1230},{},[1231],{"type":37,"tag":68,"props":1232,"children":1234},{"className":1233},[],[1235],{"type":43,"value":1236},"TO_DATE()",{"type":37,"tag":258,"props":1238,"children":1239},{},[1240,1242,1248],{"type":43,"value":1241},"12.3 (native; on older versions use ",{"type":37,"tag":68,"props":1243,"children":1245},{"className":1244},[],[1246],{"type":43,"value":1247},"STR_TO_DATE()",{"type":43,"value":1249},")",{"type":37,"tag":236,"props":1251,"children":1252},{},[1253,1262],{"type":37,"tag":258,"props":1254,"children":1255},{},[1256],{"type":37,"tag":68,"props":1257,"children":1259},{"className":1258},[],[1260],{"type":43,"value":1261},"TRUNC()",{"type":37,"tag":258,"props":1263,"children":1264},{},[1265],{"type":43,"value":1266},"12.2",{"type":37,"tag":789,"props":1268,"children":1270},{"id":1269},"null-handling",[1271],{"type":43,"value":1272},"NULL Handling",{"type":37,"tag":46,"props":1274,"children":1275},{},[1276,1278,1284,1286,1291,1293,1298,1300,1306],{"type":43,"value":1277},"Oracle treats empty strings as ",{"type":37,"tag":68,"props":1279,"children":1281},{"className":1280},[],[1282],{"type":43,"value":1283},"NULL",{"type":43,"value":1285},". ",{"type":37,"tag":68,"props":1287,"children":1289},{"className":1288},[],[1290],{"type":43,"value":73},{"type":43,"value":1292}," does ",{"type":37,"tag":90,"props":1294,"children":1295},{},[1296],{"type":43,"value":1297},"not",{"type":43,"value":1299}," activate this automatically — ",{"type":37,"tag":68,"props":1301,"children":1303},{"className":1302},[],[1304],{"type":43,"value":1305},"EMPTY_STRING_IS_NULL",{"type":43,"value":1307}," must be added separately:",{"type":37,"tag":178,"props":1309,"children":1311},{"className":180,"code":1310,"language":182,"meta":183,"style":183},"SET sql_mode = 'ORACLE,EMPTY_STRING_IS_NULL';\n",[1312],{"type":37,"tag":68,"props":1313,"children":1314},{"__ignoreMap":183},[1315],{"type":37,"tag":189,"props":1316,"children":1317},{"class":191,"line":192},[1318],{"type":37,"tag":189,"props":1319,"children":1320},{},[1321],{"type":43,"value":1310},{"type":37,"tag":46,"props":1323,"children":1324},{},[1325,1327,1332,1333,1339,1341,1346],{"type":43,"value":1326},"Without ",{"type":37,"tag":68,"props":1328,"children":1330},{"className":1329},[],[1331],{"type":43,"value":1305},{"type":43,"value":148},{"type":37,"tag":68,"props":1334,"children":1336},{"className":1335},[],[1337],{"type":43,"value":1338},"''",{"type":43,"value":1340}," is not ",{"type":37,"tag":68,"props":1342,"children":1344},{"className":1343},[],[1345],{"type":43,"value":1283},{"type":43,"value":1347}," in MariaDB even in Oracle mode.",{"type":37,"tag":789,"props":1349,"children":1351},{"id":1350},"other-automatic-behaviors",[1352],{"type":43,"value":1353},"Other Automatic Behaviors",{"type":37,"tag":82,"props":1355,"children":1356},{},[1357,1368,1387,1407,1423],{"type":37,"tag":86,"props":1358,"children":1359},{},[1360,1366],{"type":37,"tag":68,"props":1361,"children":1363},{"className":1362},[],[1364],{"type":43,"value":1365},"||",{"type":43,"value":1367}," as string concatenation (NULL-ignoring)",{"type":37,"tag":86,"props":1369,"children":1370},{},[1371,1377,1379,1385],{"type":37,"tag":68,"props":1372,"children":1374},{"className":1373},[],[1375],{"type":43,"value":1376},"MINUS",{"type":43,"value":1378}," as synonym for ",{"type":37,"tag":68,"props":1380,"children":1382},{"className":1381},[],[1383],{"type":43,"value":1384},"EXCEPT",{"type":43,"value":1386}," (10.6+)",{"type":37,"tag":86,"props":1388,"children":1389},{},[1390,1392,1398,1399,1405],{"type":43,"value":1391},"Named placeholders (",{"type":37,"tag":68,"props":1393,"children":1395},{"className":1394},[],[1396],{"type":43,"value":1397},":1",{"type":43,"value":148},{"type":37,"tag":68,"props":1400,"children":1402},{"className":1401},[],[1403],{"type":43,"value":1404},":2",{"type":43,"value":1406},") in prepared statements",{"type":37,"tag":86,"props":1408,"children":1409},{},[1410,1416,1417],{"type":37,"tag":68,"props":1411,"children":1413},{"className":1412},[],[1414],{"type":43,"value":1415},"SELECT UNIQUE",{"type":43,"value":1378},{"type":37,"tag":68,"props":1418,"children":1420},{"className":1419},[],[1421],{"type":43,"value":1422},"SELECT DISTINCT",{"type":37,"tag":86,"props":1424,"children":1425},{},[1426,1432],{"type":37,"tag":68,"props":1427,"children":1429},{"className":1428},[],[1430],{"type":43,"value":1431},"DUAL",{"type":43,"value":1433}," table support",{"type":37,"tag":56,"props":1435,"children":1437},{"id":1436},"what-requires-manual-rewriting",[1438],{"type":43,"value":1439},"What Requires Manual Rewriting",{"type":37,"tag":46,"props":1441,"children":1442},{},[1443],{"type":43,"value":1444},"These Oracle features have no direct equivalent and require code changes:",{"type":37,"tag":82,"props":1446,"children":1447},{},[1448,1469,1497,1565,1653,1666],{"type":37,"tag":86,"props":1449,"children":1450},{},[1451,1459,1461,1467],{"type":37,"tag":90,"props":1452,"children":1453},{},[1454],{"type":37,"tag":68,"props":1455,"children":1457},{"className":1456},[],[1458],{"type":43,"value":338},{"type":43,"value":1460}," — replace with views (",{"type":37,"tag":68,"props":1462,"children":1464},{"className":1463},[],[1465],{"type":43,"value":1466},"CREATE VIEW",{"type":43,"value":1468},") or update object references directly",{"type":37,"tag":86,"props":1470,"children":1471},{},[1472,1487,1489,1495],{"type":37,"tag":90,"props":1473,"children":1474},{},[1475,1480,1481],{"type":37,"tag":68,"props":1476,"children":1478},{"className":1477},[],[1479],{"type":43,"value":345},{"type":43,"value":407},{"type":37,"tag":68,"props":1482,"children":1484},{"className":1483},[],[1485],{"type":43,"value":1486},"INSERT FIRST",{"type":43,"value":1488}," — rewrite as multiple ",{"type":37,"tag":68,"props":1490,"children":1492},{"className":1491},[],[1493],{"type":43,"value":1494},"INSERT",{"type":43,"value":1496}," statements or application logic",{"type":37,"tag":86,"props":1498,"children":1499},{},[1500,1510,1512,1517,1518,1523,1525],{"type":37,"tag":90,"props":1501,"children":1502},{},[1503,1508],{"type":37,"tag":68,"props":1504,"children":1506},{"className":1505},[],[1507],{"type":43,"value":361},{"type":43,"value":1509}," outer join syntax",{"type":43,"value":1511}," — supported natively since MariaDB 12.1 in Oracle mode. On older versions rewrite as ",{"type":37,"tag":68,"props":1513,"children":1515},{"className":1514},[],[1516],{"type":43,"value":405},{"type":43,"value":407},{"type":37,"tag":68,"props":1519,"children":1521},{"className":1520},[],[1522],{"type":43,"value":413},{"type":43,"value":1524},":\n",{"type":37,"tag":178,"props":1526,"children":1528},{"className":180,"code":1527,"language":182,"meta":183,"style":183},"-- Oracle:\nSELECT * FROM a, b WHERE a.id = b.id(+);\n-- MariaDB:\nSELECT * FROM a LEFT JOIN b ON a.id = b.id;\n",[1529],{"type":37,"tag":68,"props":1530,"children":1531},{"__ignoreMap":183},[1532,1540,1548,1556],{"type":37,"tag":189,"props":1533,"children":1534},{"class":191,"line":192},[1535],{"type":37,"tag":189,"props":1536,"children":1537},{},[1538],{"type":43,"value":1539},"-- Oracle:\n",{"type":37,"tag":189,"props":1541,"children":1542},{"class":191,"line":24},[1543],{"type":37,"tag":189,"props":1544,"children":1545},{},[1546],{"type":43,"value":1547},"SELECT * FROM a, b WHERE a.id = b.id(+);\n",{"type":37,"tag":189,"props":1549,"children":1550},{"class":191,"line":209},[1551],{"type":37,"tag":189,"props":1552,"children":1553},{},[1554],{"type":43,"value":1555},"-- MariaDB:\n",{"type":37,"tag":189,"props":1557,"children":1559},{"class":191,"line":1558},4,[1560],{"type":37,"tag":189,"props":1561,"children":1562},{},[1563],{"type":43,"value":1564},"SELECT * FROM a LEFT JOIN b ON a.id = b.id;\n",{"type":37,"tag":86,"props":1566,"children":1567},{},[1568,1576,1578],{"type":37,"tag":90,"props":1569,"children":1570},{},[1571],{"type":37,"tag":68,"props":1572,"children":1574},{"className":1573},[],[1575],{"type":43,"value":425},{"type":43,"value":1577}," — rewrite as recursive CTE:\n",{"type":37,"tag":178,"props":1579,"children":1581},{"className":180,"code":1580,"language":182,"meta":183,"style":183},"-- MariaDB equivalent:\nWITH RECURSIVE tree AS (\n    SELECT id, parent_id, name FROM categories WHERE parent_id IS NULL\n    UNION ALL\n    SELECT c.id, c.parent_id, c.name FROM categories c\n    JOIN tree t ON c.parent_id = t.id\n)\nSELECT * FROM tree;\n",[1582],{"type":37,"tag":68,"props":1583,"children":1584},{"__ignoreMap":183},[1585,1593,1601,1609,1617,1626,1635,1644],{"type":37,"tag":189,"props":1586,"children":1587},{"class":191,"line":192},[1588],{"type":37,"tag":189,"props":1589,"children":1590},{},[1591],{"type":43,"value":1592},"-- MariaDB equivalent:\n",{"type":37,"tag":189,"props":1594,"children":1595},{"class":191,"line":24},[1596],{"type":37,"tag":189,"props":1597,"children":1598},{},[1599],{"type":43,"value":1600},"WITH RECURSIVE tree AS (\n",{"type":37,"tag":189,"props":1602,"children":1603},{"class":191,"line":209},[1604],{"type":37,"tag":189,"props":1605,"children":1606},{},[1607],{"type":43,"value":1608},"    SELECT id, parent_id, name FROM categories WHERE parent_id IS NULL\n",{"type":37,"tag":189,"props":1610,"children":1611},{"class":191,"line":1558},[1612],{"type":37,"tag":189,"props":1613,"children":1614},{},[1615],{"type":43,"value":1616},"    UNION ALL\n",{"type":37,"tag":189,"props":1618,"children":1620},{"class":191,"line":1619},5,[1621],{"type":37,"tag":189,"props":1622,"children":1623},{},[1624],{"type":43,"value":1625},"    SELECT c.id, c.parent_id, c.name FROM categories c\n",{"type":37,"tag":189,"props":1627,"children":1629},{"class":191,"line":1628},6,[1630],{"type":37,"tag":189,"props":1631,"children":1632},{},[1633],{"type":43,"value":1634},"    JOIN tree t ON c.parent_id = t.id\n",{"type":37,"tag":189,"props":1636,"children":1638},{"class":191,"line":1637},7,[1639],{"type":37,"tag":189,"props":1640,"children":1641},{},[1642],{"type":43,"value":1643},")\n",{"type":37,"tag":189,"props":1645,"children":1647},{"class":191,"line":1646},8,[1648],{"type":37,"tag":189,"props":1649,"children":1650},{},[1651],{"type":43,"value":1652},"SELECT * FROM tree;\n",{"type":37,"tag":86,"props":1654,"children":1655},{},[1656,1664],{"type":37,"tag":90,"props":1657,"children":1658},{},[1659],{"type":37,"tag":68,"props":1660,"children":1662},{"className":1661},[],[1663],{"type":43,"value":448},{"type":43,"value":1665}," — store timezone offset in a separate column or handle in application",{"type":37,"tag":86,"props":1667,"children":1668},{},[1669,1674],{"type":37,"tag":90,"props":1670,"children":1671},{},[1672],{"type":43,"value":1673},"Object types and inheritance",{"type":43,"value":1675}," — no equivalent; restructure as normalized tables",{"type":37,"tag":56,"props":1677,"children":1679},{"id":1678},"migration-tools",[1680],{"type":43,"value":1681},"Migration Tools",{"type":37,"tag":82,"props":1683,"children":1684},{},[1685,1702,1711,1721],{"type":37,"tag":86,"props":1686,"children":1687},{},[1688,1700],{"type":37,"tag":90,"props":1689,"children":1690},{},[1691],{"type":37,"tag":1692,"props":1693,"children":1697},"a",{"href":1694,"rel":1695},"https:\u002F\u002Fmariadb.com\u002Fresources\u002Fblog\u002Fmariadb-migration-assessment-tool-how-ready-are-you-to-migrate-to-mariadb-from-oracle\u002F",[1696],"nofollow",[1698],{"type":43,"value":1699},"MariaDB Migration Assessment Tool",{"type":43,"value":1701}," — analyzes Oracle DDL export and scores compatibility before you start",{"type":37,"tag":86,"props":1703,"children":1704},{},[1705,1709],{"type":37,"tag":90,"props":1706,"children":1707},{},[1708],{"type":43,"value":94},{"type":43,"value":1710}," — create MariaDB tables that read live Oracle data via ODBC; useful for phased migration without full cutover",{"type":37,"tag":86,"props":1712,"children":1713},{},[1714,1719],{"type":37,"tag":90,"props":1715,"children":1716},{},[1717],{"type":43,"value":1718},"DBeaver",{"type":43,"value":1720}," — schema mapping, data comparison, and transfer between Oracle and MariaDB",{"type":37,"tag":86,"props":1722,"children":1723},{},[1724,1729],{"type":37,"tag":90,"props":1725,"children":1726},{},[1727],{"type":43,"value":1728},"MaxScale query rewriting",{"type":43,"value":1730}," — intercept and rewrite unsupported Oracle syntax on-the-fly for cases that can't be changed in the application",{"type":37,"tag":56,"props":1732,"children":1734},{"id":1733},"key-gotchas",[1735],{"type":43,"value":1736},"Key Gotchas",{"type":37,"tag":82,"props":1738,"children":1739},{},[1740,1834,1862,1883,1923,1946],{"type":37,"tag":86,"props":1741,"children":1742},{},[1743,1748,1750,1756,1758,1763,1765,1770,1772,1778,1779,1785,1787,1793,1795,1800,1802,1807,1809,1815,1817,1823,1825,1832],{"type":37,"tag":90,"props":1744,"children":1745},{},[1746],{"type":43,"value":1747},"Autocommit (commit model is reversed)",{"type":43,"value":1749},": Oracle has no ",{"type":37,"tag":68,"props":1751,"children":1753},{"className":1752},[],[1754],{"type":43,"value":1755},"autocommit",{"type":43,"value":1757}," variable and defaults to ",{"type":37,"tag":90,"props":1759,"children":1760},{},[1761],{"type":43,"value":1762},"manual commit",{"type":43,"value":1764}," — an ",{"type":37,"tag":68,"props":1766,"children":1768},{"className":1767},[],[1769],{"type":43,"value":1494},{"type":43,"value":1771},"\u002F",{"type":37,"tag":68,"props":1773,"children":1775},{"className":1774},[],[1776],{"type":43,"value":1777},"UPDATE",{"type":43,"value":1771},{"type":37,"tag":68,"props":1780,"children":1782},{"className":1781},[],[1783],{"type":43,"value":1784},"DELETE",{"type":43,"value":1786}," is not durable until you run an explicit ",{"type":37,"tag":68,"props":1788,"children":1790},{"className":1789},[],[1791],{"type":43,"value":1792},"COMMIT",{"type":43,"value":1794},". MariaDB is the opposite: ",{"type":37,"tag":68,"props":1796,"children":1798},{"className":1797},[],[1799],{"type":43,"value":1755},{"type":43,"value":1801}," is ",{"type":37,"tag":90,"props":1803,"children":1804},{},[1805],{"type":43,"value":1806},"ON",{"type":43,"value":1808}," by default, so each statement commits immediately. To preserve Oracle's batch-then-commit behavior, wrap units of work in ",{"type":37,"tag":68,"props":1810,"children":1812},{"className":1811},[],[1813],{"type":43,"value":1814},"START TRANSACTION ... COMMIT",{"type":43,"value":1816}," or set ",{"type":37,"tag":68,"props":1818,"children":1820},{"className":1819},[],[1821],{"type":43,"value":1822},"autocommit=0",{"type":43,"value":1824},". See Oracle's ",{"type":37,"tag":1692,"props":1826,"children":1829},{"href":1827,"rel":1828},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fdatabase\u002Foracle\u002Foracle-database\u002F21\u002Fcncpt\u002Ftransactions.html",[1696],[1830],{"type":43,"value":1831},"Transactions",{"type":43,"value":1833}," concepts guide.",{"type":37,"tag":86,"props":1835,"children":1836},{},[1837,1846,1848,1853,1855,1860],{"type":37,"tag":90,"props":1838,"children":1839},{},[1840],{"type":37,"tag":68,"props":1841,"children":1843},{"className":1842},[],[1844],{"type":43,"value":1845},"SYSDATE",{"type":43,"value":1847},": In MariaDB Oracle mode, ",{"type":37,"tag":68,"props":1849,"children":1851},{"className":1850},[],[1852],{"type":43,"value":1845},{"type":43,"value":1854}," works but returns ",{"type":37,"tag":68,"props":1856,"children":1858},{"className":1857},[],[1859],{"type":43,"value":312},{"type":43,"value":1861},". Verify date-only comparisons.",{"type":37,"tag":86,"props":1863,"children":1864},{},[1865,1873,1875,1881],{"type":37,"tag":90,"props":1866,"children":1867},{},[1868],{"type":37,"tag":68,"props":1869,"children":1871},{"className":1870},[],[1872],{"type":43,"value":1431},{"type":43,"value":1874},": Works in MariaDB but not identically — avoid schema-qualified references like ",{"type":37,"tag":68,"props":1876,"children":1878},{"className":1877},[],[1879],{"type":43,"value":1880},"schema.DUAL",{"type":43,"value":1882},".",{"type":37,"tag":86,"props":1884,"children":1885},{},[1886,1891,1893,1899,1901,1907,1908,1914,1915,1921],{"type":37,"tag":90,"props":1887,"children":1888},{},[1889],{"type":43,"value":1890},"Sequences",{"type":43,"value":1892},": ",{"type":37,"tag":68,"props":1894,"children":1896},{"className":1895},[],[1897],{"type":43,"value":1898},"CREATE SEQUENCE",{"type":43,"value":1900}," works in MariaDB 10.3+ with Oracle-compatible syntax (",{"type":37,"tag":68,"props":1902,"children":1904},{"className":1903},[],[1905],{"type":43,"value":1906},"MINVALUE",{"type":43,"value":148},{"type":37,"tag":68,"props":1909,"children":1911},{"className":1910},[],[1912],{"type":43,"value":1913},"MAXVALUE",{"type":43,"value":148},{"type":37,"tag":68,"props":1916,"children":1918},{"className":1917},[],[1919],{"type":43,"value":1920},"INCREMENT BY",{"type":43,"value":1922},").",{"type":37,"tag":86,"props":1924,"children":1925},{},[1926,1937,1939,1944],{"type":37,"tag":90,"props":1927,"children":1928},{},[1929,1935],{"type":37,"tag":68,"props":1930,"children":1932},{"className":1931},[],[1933],{"type":43,"value":1934},"DROP USER",{"type":43,"value":1936}," with active sessions",{"type":43,"value":1938}," (12.1+): Oracle-compatible behavior — in Oracle mode, ",{"type":37,"tag":68,"props":1940,"children":1942},{"className":1941},[],[1943],{"type":43,"value":1934},{"type":43,"value":1945}," fails if the user has active sessions; in other modes, it issues a warning.",{"type":37,"tag":86,"props":1947,"children":1948},{},[1949,1954],{"type":37,"tag":90,"props":1950,"children":1951},{},[1952],{"type":43,"value":1953},"~20% rewrite",{"type":43,"value":1955},": No tool achieves 100% Oracle-to-MariaDB conversion. Plan for manual review of complex PL\u002FSQL, object types, and unsupported syntax.",{"type":37,"tag":56,"props":1957,"children":1959},{"id":1958},"sources",[1960],{"type":43,"value":1961},"Sources",{"type":37,"tag":82,"props":1963,"children":1964},{},[1965,1975,1985,1995,2004,2014,2024],{"type":37,"tag":86,"props":1966,"children":1967},{},[1968],{"type":37,"tag":1692,"props":1969,"children":1972},{"href":1970,"rel":1971},"https:\u002F\u002Fmariadb.com\u002Fdocs\u002Frelease-notes\u002Fcommunity-server\u002Fabout\u002Fcompatibility-and-differences\u002Fsql_modeoracle",[1696],[1973],{"type":43,"value":1974},"sql_mode=ORACLE — MariaDB Docs",{"type":37,"tag":86,"props":1976,"children":1977},{},[1978],{"type":37,"tag":1692,"props":1979,"children":1982},{"href":1980,"rel":1981},"https:\u002F\u002Fmariadb.com\u002Fmigrations\u002Foracle-to-mariadb\u002F",[1696],[1983],{"type":43,"value":1984},"Oracle to MariaDB Migration — mariadb.com",{"type":37,"tag":86,"props":1986,"children":1987},{},[1988],{"type":37,"tag":1692,"props":1989,"children":1992},{"href":1990,"rel":1991},"https:\u002F\u002Fmariadb.com\u002Fresources\u002Fblog\u002Feasier-oracle-to-mariadb-migrations-with-sql_mode-and-dbeaver\u002F",[1696],[1993],{"type":43,"value":1994},"Easier Oracle to MariaDB Migrations with sql_mode and DBeaver — MariaDB Blog",{"type":37,"tag":86,"props":1996,"children":1997},{},[1998],{"type":37,"tag":1692,"props":1999,"children":2001},{"href":1694,"rel":2000},[1696],[2002],{"type":43,"value":2003},"Migration Assessment Tool — MariaDB Blog",{"type":37,"tag":86,"props":2005,"children":2006},{},[2007],{"type":37,"tag":1692,"props":2008,"children":2011},{"href":2009,"rel":2010},"https:\u002F\u002Fmariadb.com\u002Fproducts\u002Fenterprise\u002Fcomparison\u002Fmariadb-vs-postgresql\u002F",[1696],[2012],{"type":43,"value":2013},"MariaDB vs PostgreSQL for Oracle Migration — mariadb.com",{"type":37,"tag":86,"props":2015,"children":2016},{},[2017],{"type":37,"tag":1692,"props":2018,"children":2021},{"href":2019,"rel":2020},"https:\u002F\u002Fseveralnines.com\u002Fblog\u002Fmigration-oracle-database-mariadb-deep-dive\u002F",[1696],[2022],{"type":43,"value":2023},"Migration from Oracle to MariaDB Deep Dive — Severalnines",{"type":37,"tag":86,"props":2025,"children":2026},{},[2027],{"type":37,"tag":1692,"props":2028,"children":2031},{"href":2029,"rel":2030},"https:\u002F\u002Fmariadb.org\u002Fdata-migration-from-oracle-to-mariadb-with-docker-and-connect-se-a-step-by-step-guide\u002F",[1696],[2032],{"type":43,"value":2033},"Data migration from Oracle to MariaDB with Connect SE — mariadb.org",{"type":37,"tag":46,"props":2035,"children":2036},{},[2037],{"type":37,"tag":50,"props":2038,"children":2039},{},[2040,2042,2049],{"type":43,"value":2041},"For topics not covered here, see the official MariaDB documentation at ",{"type":37,"tag":1692,"props":2043,"children":2046},{"href":2044,"rel":2045},"https:\u002F\u002Fmariadb.com\u002Fdocs",[1696],[2047],{"type":43,"value":2048},"mariadb.com\u002Fdocs",{"type":43,"value":1882},{"type":37,"tag":2051,"props":2052,"children":2053},"style",{},[2054],{"type":43,"value":2055},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2057,"total":1646},[2058,2072,2084,2095,2107,2125,2135,2148],{"slug":2059,"name":2059,"fn":2060,"description":2061,"org":2062,"tags":2063,"stars":20,"repoUrl":21,"updatedAt":2071},"mariadb-features","optimize and manage MariaDB databases","MariaDB-specific features and capabilities that go beyond standard MySQL. Use when evaluating MariaDB, optimizing an existing MariaDB application, reviewing code or schema for MariaDB improvements, asking what MariaDB can do that other databases cannot, or migrating from Oracle to MariaDB. Also use when the user asks what could be improved in how a codebase uses MariaDB, or asks about MariaDB advantages over MySQL or PostgreSQL.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2064,2065,2066,2069],{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":2067,"slug":2068,"type":13},"Performance","performance",{"name":2070,"slug":182,"type":13},"SQL","2026-07-16T06:01:55.988338",{"slug":2073,"name":2073,"fn":2074,"description":2075,"org":2076,"tags":2077,"stars":20,"repoUrl":21,"updatedAt":2083},"mariadb-mcp","connect AI agents to MariaDB","How to connect AI agents to MariaDB using the Model Context Protocol (MCP). Use when setting up MCP with MariaDB, connecting Claude Code, Cursor, or other AI tools to a MariaDB database, enabling natural language database queries, or building AI applications that need live database access. The MariaDB MCP Server lets agents query schemas, run read-only SQL, and perform semantic search against MariaDB.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2078,2079,2080],{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":2081,"slug":2082,"type":13},"MCP","mcp","2026-07-13T06:14:00.682655",{"slug":2085,"name":2085,"fn":2086,"description":2087,"org":2088,"tags":2089,"stars":20,"repoUrl":21,"updatedAt":2094},"mariadb-query-optimization","optimize MariaDB database queries","Best practices for query optimization in MariaDB — indexing strategies, EXPLAIN analysis, pagination, histogram statistics, and MariaDB-specific optimizer settings. Use when diagnosing slow queries, designing indexes, reviewing schema or query performance, or when queries involve large tables, pagination, GROUP BY, or ORDER BY. Also use when the user asks about MariaDB query performance, EXPLAIN output, or optimizer behavior.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2090,2091,2092,2093],{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":2067,"slug":2068,"type":13},{"name":2070,"slug":182,"type":13},"2026-07-13T06:14:12.656074",{"slug":2096,"name":2096,"fn":2097,"description":2098,"org":2099,"tags":2100,"stars":20,"repoUrl":21,"updatedAt":2106},"mariadb-replication-and-ha","configure MariaDB replication and high availability","Best practices for MariaDB replication and high availability — Galera Cluster, GTID replication, semi-synchronous replication, parallel replication, and application patterns for HA environments. Use when setting up replication, designing applications for HA, working with Galera Cluster, asking about MariaDB GTID, handling replication lag in application code, or choosing between replication topologies. IMPORTANT — MariaDB GTID format is incompatible with MySQL GTID, and Galera Cluster needs no server plugin to load but does require the separate galera wsrep provider library (galera-4).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2101,2104,2105],{"name":2102,"slug":2103,"type":13},"Architecture","architecture",{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},"2026-07-13T06:14:13.989369",{"slug":2108,"name":2108,"fn":2109,"description":2110,"org":2111,"tags":2112,"stars":20,"repoUrl":21,"updatedAt":2124},"mariadb-system-versioned-tables","implement MariaDB system-versioned tables","Best practices for MariaDB system-versioned (temporal) tables — automatic row history built into the database. Use when tracking data changes over time, implementing audit trails, meeting GDPR or compliance requirements, doing point-in-time queries, or when the user asks about row history, data versioning, temporal tables, or querying past data states in MariaDB. This feature is unique to MariaDB among MySQL-compatible databases.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2113,2116,2119,2120,2123],{"name":2114,"slug":2115,"type":13},"Audit","audit",{"name":2117,"slug":2118,"type":13},"Compliance","compliance",{"name":15,"slug":16,"type":13},{"name":2121,"slug":2122,"type":13},"GDPR","gdpr",{"name":9,"slug":8,"type":13},"2026-07-13T06:14:16.779878",{"slug":2126,"name":2126,"fn":2127,"description":2128,"org":2129,"tags":2130,"stars":20,"repoUrl":21,"updatedAt":2134},"mariadb-vector","build semantic search with MariaDB vectors","Best practices for using vectors and AI with MariaDB. Use when writing SQL involving VECTOR columns, building RAG or semantic search with MariaDB, choosing embedding models, designing vector indexes, or integrating MariaDB with AI frameworks like LangChain, LlamaIndex, or Spring AI. Also use when the user mentions MariaDB and any of: vectors, embeddings, similarity search, nearest neighbor, AI, RAG, or LLM. IMPORTANT — MariaDB has native built-in vector support since version 11.7; it is NOT a plugin or extension (unlike pgvector for PostgreSQL). Do not recommend installing any extension.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2131,2132,2133],{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},"2026-07-13T06:14:01.939479",{"slug":2136,"name":2136,"fn":2137,"description":2138,"org":2139,"tags":2140,"stars":20,"repoUrl":21,"updatedAt":2147},"mysql-to-mariadb","migrate applications from MySQL to MariaDB","Compatibility guide for developers moving from MySQL to MariaDB, and for developers with MySQL experience working with MariaDB. Use when migrating a MySQL application to MariaDB, when MySQL syntax or habits cause unexpected behavior in MariaDB, when asking about MySQL\u002FMariaDB compatibility, or when adapting code written for MySQL to run on MariaDB. IMPORTANT — MariaDB diverges significantly from MySQL 8.0 and is not a simple drop-in replacement for modern MySQL. Authentication plugins, JSON handling, GTID replication, and several SQL features differ in important ways.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2141,2142,2143,2144],{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":2145,"slug":2146,"type":13},"MySQL","mysql","2026-07-13T06:14:08.675338",{"slug":4,"name":4,"fn":5,"description":6,"org":2149,"tags":2150,"stars":20,"repoUrl":21,"updatedAt":22},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2151,2152,2153],{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"items":2155,"total":1646},[2156,2163,2169,2176,2182,2190,2196],{"slug":2059,"name":2059,"fn":2060,"description":2061,"org":2157,"tags":2158,"stars":20,"repoUrl":21,"updatedAt":2071},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2159,2160,2161,2162],{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":2067,"slug":2068,"type":13},{"name":2070,"slug":182,"type":13},{"slug":2073,"name":2073,"fn":2074,"description":2075,"org":2164,"tags":2165,"stars":20,"repoUrl":21,"updatedAt":2083},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2166,2167,2168],{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":2081,"slug":2082,"type":13},{"slug":2085,"name":2085,"fn":2086,"description":2087,"org":2170,"tags":2171,"stars":20,"repoUrl":21,"updatedAt":2094},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2172,2173,2174,2175],{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":2067,"slug":2068,"type":13},{"name":2070,"slug":182,"type":13},{"slug":2096,"name":2096,"fn":2097,"description":2098,"org":2177,"tags":2178,"stars":20,"repoUrl":21,"updatedAt":2106},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2179,2180,2181],{"name":2102,"slug":2103,"type":13},{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"slug":2108,"name":2108,"fn":2109,"description":2110,"org":2183,"tags":2184,"stars":20,"repoUrl":21,"updatedAt":2124},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2185,2186,2187,2188,2189],{"name":2114,"slug":2115,"type":13},{"name":2117,"slug":2118,"type":13},{"name":15,"slug":16,"type":13},{"name":2121,"slug":2122,"type":13},{"name":9,"slug":8,"type":13},{"slug":2126,"name":2126,"fn":2127,"description":2128,"org":2191,"tags":2192,"stars":20,"repoUrl":21,"updatedAt":2134},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2193,2194,2195],{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"slug":2136,"name":2136,"fn":2137,"description":2138,"org":2197,"tags":2198,"stars":20,"repoUrl":21,"updatedAt":2147},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2199,2200,2201,2202],{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":2145,"slug":2146,"type":13}]