Data types
Oracle to MariaDB data types
Every Oracle data type that MariaDB stores differently, what the converter writes for it, when, and the report line.
Each row is a type from Oracle that MariaDB stores differently: what the MariaDB script gets, why, and the line the report writes about it. The rows come from the converter's own rules, so this page matches what it does.
Convert in the browser: Oracle to MariaDB opens the converter set up for this pair. The Oracle to MariaDB migration guide covers dumping, loading and the rules for keys, indexes and names.
A report line is a fix when the converter changed something and lists it, or a problem when a value or object is worth a look.
Numbers
| In Oracle | In MariaDB | Why | Report line |
|---|---|---|---|
| NUMBER, NUMBER(p,s), FLOAT(b) | decimal(p,s), or bigint | NUMBER keeps every digit; a NUMBER without precision whose values are all whole numbers of up to 18 digits is a 64-bit integer, and a negative scale holds as many digits before the point. | None |
Booleans and bits
| In Oracle | In MariaDB | Why | Report line |
|---|---|---|---|
| BOOLEAN (23ai) | tinyint(1) | MariaDB has no boolean column, so TRUE and FALSE are 1 and 0. | None |
Text
| In Oracle | In MariaDB | Why | Report line |
|---|---|---|---|
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | varchar(n) up to 1024 characters, text types beyond | Lengths count characters, whether Oracle counted bytes or characters, so every value fits. | None |
| NUL characters in text | kept | The value is copied with the NUL character escaped. | None |
| text that isn't valid in its encoding | the bad bytes as the replacement character | The script is UTF-8 and every value has to be valid text. | invalid_utf8_replaced (problem) |
Dates and times
| In Oracle | In MariaDB | Why | Report line |
|---|---|---|---|
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | varchar(100) with Oracle's text, such as +01-06 | MariaDB's TIME holds durations up to 838 hours, and has no years or months; the text keeps every part. | type_replaced (fix) |
| DATE, TIMESTAMP(p) | datetime(p) | Oracle's DATE holds a time to the second, so it is a date and time. An export in an American or German session writes dates without their time or century (DD-MON-RR); export in an ISO session (SYYYY-MM-DD HH24:MI:SS) to keep them. | None |
| TIMESTAMP(7) to TIMESTAMP(9) | six digits of a second, the seventh cut | MariaDB keeps microseconds; the seventh digit (100 nanoseconds) is cut, never rounded, so no value moves to the next second or day. | fraction_cut (fix) |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | datetime(p) in UTC | MariaDB's TIMESTAMP only reaches 2038, so moments are stored as datetime in UTC, the same instant whatever offset each value had. | moments_as_utc (fix) |
| dates before year 1 and time zones given as region names | NULL | MariaDB stores years 1000 to 9999, and Oracle goes back to the year 1. Those values become NULL and the report counts them. | date_out_of_range (problem) |
Binary
| In Oracle | In MariaDB | Why | Report line |
|---|---|---|---|
| BLOB, RAW(n), LONG RAW | binary(n), varbinary(n) and blob types | Bytes stay bytes. | None |
JSON, spatial and other types
| In Oracle | In MariaDB | Why | Report line |
|---|---|---|---|
| JSON (21c), and CLOB holding JSON | json | The same JSON values; a SQL NULL the export wrote as 'null' stays NULL. | None |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | text | Oracle's own types have no equivalent; their values keep their text, ROWID values included, though they mean nothing off Oracle. | type_replaced (fix) |
| types IntoSQL doesn't know, and object types | longtext | Text holds any value; change the type after loading. | unknown_type (problem) |
| NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE | NULL | MariaDB's floating-point types have no NaN or infinity, so those values become NULL and the report counts them. | invalid_value_null (problem) |
Counters and identities
| In Oracle | In MariaDB | Why | Report line |
|---|---|---|---|
| identity columns, and a sequence a BEFORE INSERT trigger assigns | AUTO_INCREMENT, continuing after the highest id | The copied ids load as they are, and the counter continues after the highest one. A column a trigger fills from a sequence (the way before 12c) is an identity too. | None |
| identity columns the target can't count | a plain integer | MariaDB counts one column per table, at the start of a key; any other keeps its values without a counter. | counter_dropped (problem) |
Other pairs
- Oracle into PostgreSQL, MySQL, SQLite, SQL Server, Oracle
- Into MariaDB from MySQL, MariaDB, PostgreSQL, SQL Server, SQLite
- Every pair