---
title: "Migracja MySQL do Oracle w przeglądarce"
description: "Migruj bazę MySQL lub MariaDB do Oracle: zamień jej zrzut w skrypt z tymi samymi tabelami, kluczami i danymi oraz raportem każdej zmiany."
canonical: https://intosql.com/pl/mysql-do-oracle
last_updated: 2026-10-15
---

# Migracja MySQL do Oracle w przeglądarce

Upuść zrzut z mysqldump, mariadb-dump, mysqlpump, phpMyAdmin lub Adminer jako .sql lub .sql.gz i pobierz skrypt Oracle z tymi samymi tabelami, kluczami, indeksami i danymi. Każda wartość, której Oracle nie może przechować bez zmian, i każdy obiekt, którego nie przenosi, są wymienione w raporcie.

[Przewodnik migracji MySQL do Oracle](https://intosql.com/docs/migrations/mysql-to-oracle)

[Typy danych z MySQL do Oracle](https://intosql.com/docs/types/mysql-to-oracle)

## Co zmienia się między MySQL a Oracle

Każdy wiersz to reguła stosowana przez konwerter, z wpisem, który dodaje do raportu, gdy reguła coś zmienia w twoich danych.

| W MySQL | W Oracle | Wpis w raporcie |
| --- | --- | --- |
| TINYINT(1), BOOL | NUMBER(1) z CHECK 0 i 1, gdy każda wartość to 0 lub 1, w przeciwnym razie NUMBER(3) | `bool_kept_numeric` |
| UNSIGNED integers | NUMBER wystarczająco szeroki dla zakresu, z CHECK, że wartość nie jest ujemna |  |
| ZEROFILL and display widths | usunięte | `zerofill_dropped` |
| FLOAT(M,D) | BINARY_FLOAT lub BINARY_DOUBLE, bez skali | `float_scale_dropped` |
| DECIMAL(p,s) | NUMBER(p,s) do 38 cyfr; powyżej VARCHAR2 | `decimal_as_text` |
| BIT(1), BIT(n) | NUMBER(1), NUMBER(19) do 63 bitów, NUMBER(20) dla BIT(64) |  |
| zero, partial or impossible dates (0000-00-00, 2024-02-30) | NULL | `invalid_date_null` |
| NOT NULL columns with values that become NULL | NOT NULL usunięte | `not_null_relaxed` |
| empty strings and empty binary values | NULL | `empty_string_null` |
| DEFAULT '0000-00-00' | brak wartości domyślnej | `zero_date_default` |
| TIME | INTERVAL DAY TO SECOND, który mieści czasy trwania |  |
| YEAR | NUMBER(4) z CHECK zakresu |  |
| CHAR(n), VARCHAR(n) | VARCHAR2(n CHAR), liczony w znakach |  |
| VARCHAR(n) and TEXT longer than 4000 bytes | CLOB | `text_as_lob` |
| DATETIME | TIMESTAMP |  |
| TIMESTAMP | TIMESTAMP WITH TIME ZONE w strefie podanej w zrzucie, UTC, gdy jej nie podaje | `timestamp_zone_assumed` |
| ENUM | VARCHAR2 z CHECK dozwolonych wartości |  |
| ENUM holding '' (MySQL's error value) | NULL |  |
| ENUM holding values outside its list | bez CHECK | `enum_check_skipped` |
| SET | VARCHAR2 w zapisie MySQL ('a,b') |  |
| JSON | CLOB |  |
| NUL bytes in text | zachowane |  |
| text that isn't valid in its character set | błędne bajty jako znak zastępczy | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | skopiowane bez zmian | `mojibake_suspected` |
| AUTO_INCREMENT | GENERATED BY DEFAULT ON NULL AS IDENTITY, wznowione za skopiowanymi id |  |
| MyISAM AUTO_INCREMENT on the second column of a key | jeden licznik dla tabeli | `myisam_group_autoincrement` |
| ON UPDATE CURRENT_TIMESTAMP | wyzwalacz BEFORE UPDATE | `on_update_trigger` |
| generated columns | kolumny wirtualne | `stored_as_virtual` |
| generated columns with functions Oracle lacks | zwykła kolumna | `generated_not_translated` |
| INVISIBLE columns | kolumny INVISIBLE |  |
| CHECK constraints | przetłumaczone, wewnątrz CREATE TABLE |  |
| CHECK constraints with functions Oracle lacks | nie jest tworzone | `check_skipped` |
| CHECK ... NOT ENFORCED | nie jest tworzone | `check_not_enforced` |
| defaults with functions Oracle lacks | brak wartości domyślnej | `default_not_translated` |
| keys and indexes on a prefix, c(20) | indeks na SUBSTR kolumny | `prefix_unique` |
| FULLTEXT indexes | nie jest tworzone | `fulltext_not_created` |
| SPATIAL indexes | nie jest tworzone | `spatial_index_not_created` |
| functional indexes, and indexes on whole CLOB or BLOB columns | nie jest tworzony | `index_skipped` |
| foreign keys | po danych z ENABLE NOVALIDATE, potem walidowany z ostrzeżeniem o osieroconych wierszach |  |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | usunięte | `foreign_key_action_unsupported` |
| foreign keys to columns without a unique key | nie jest tworzony | `foreign_key_skipped` |
| table and column names | wielkie litery dla zwykłych nazw, inne jak w źródle | `identifier_renamed` |
| names over 128 bytes | skrócone | `name_shortened` |
| GEOMETRY, POINT, POLYGON... | BLOB z WKB | `geometry_as_blob` |
| INET4, INET6, UUID (MariaDB) | VARCHAR2(39), VARCHAR2(36) |  |
| BINARY, VARBINARY, BLOB | RAW do 2000 bajtów, w przeciwnym razie BLOB |  |
| PARTITION BY | jedna tabela | `partitions_dropped` |
| WITH SYSTEM VERSIONING (MariaDB) | tabela z bieżącymi wierszami | `system_versioning_dropped` |
| MyISAM, MEMORY and other engines | zwykła tabela | `engine_dropped` |
| views, triggers, procedures, functions and events | wymienione w raporcie | `not_converted_objects` |
| dumps without CREATE TABLE | typy odczytane z wartości | `no_schema` |
| geometries in a dump without CREATE TABLE | BLOB z WKB | `geometry_inferred` |
| _ci collations | dokładne porównanie | `case_insensitive_collation` |
| SET NAMES utf8 from utf8mb4 tables | przekonwertowane, z ostrzeżeniem | `dump_lost_four_byte_chars` |
| dumps without SET NAMES whose text isn't UTF-8 | odczytane jako Latin-1 (Windows-1252) | `charset_guessed` |
| sjis, cp932, gbk, big5 dumps | odczytane jako UTF-8, z ostrzeżeniem | `unsupported_charset` |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | obliczone |  |
| other expressions in rows | NULL | `expression_value` |
| DEFAULT in VALUES | wartość domyślna kolumny | `default_keyword_filled` |
| DEFAULT in VALUES without a literal default | NULL | `default_keyword_null` |
| REPLACE and INSERT IGNORE | zwykłe wiersze | `replace_as_insert` |
| types IntoSQL doesn't know | CLOB | `unknown_type` |
| values that don't fit their column | NULL | `invalid_value_null` |
| unreadable geometries | NULL | `bad_geometry` |
| dumps of several databases | jeden schemat, nazwa każdej tabeli zaczyna się od nazwy jej bazy | `databases_merged` |
| CREATE SEQUENCE (MariaDB) | CREATE SEQUENCE, od osiągniętej wartości |  |
| VECTOR(n) (MariaDB 11.7+) | CLOB z liczbami float jako tablicą JSON | `type_replaced` |

## Załaduj skrypt do Oracle

Skrypt tworzy tabele, kopiuje wiersze, a potem dodaje klucze, indeksy i klucze obce, więc ładuje się szybko i zatrzymuje przy pierwszym błędzie.

```shell
NLS_LANG=.AL32UTF8 sqlplus -S -L user@//localhost/mydb @mysql.oracle.sql
```

Klucze obce są dodawane z ENABLE NOVALIDATE, więc nowe wiersze są sprawdzane od razu, a potem walidowane. Jeśli stary wiersz wskazuje na nieistniejący wiersz, skrypt podaje, którego ograniczenia to dotyczy, i zostawia je niezwalidowane, zamiast przerwać w połowie.

Przy dużym zrzucie uruchom SQL*Plus na tej samej maszynie co baza danych. Skrypt zatwierdza co 100 wierszy. Użytkownik, który go uruchamia, potrzebuje CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER i CREATE PROCEDURE oraz limitu w swojej przestrzeni tabel.

## Jak zrobić zrzut MySQL dla najlepszego wyniku

Konwerter odczytuje to, co zawiera zrzut. Te opcje zachowują w nim więcej twoich danych:

- --default-character-set=utf8mb4 zachowuje emoji i inne 4-bajtowe znaki, które zrzut utf8 traci, zanim zobaczy go konwerter.
- --hex-blob zapisuje kolumny binarne szesnastkowo, co przetrwa kopiowanie między systemami.
- --routines --triggers --events dodają te obiekty do zrzutu, aby raport mógł je wymienić.

## Co nie jest konwertowane

Widoki, wyzwalacze, procedury składowane, funkcje i zdarzenia są pisane we własnym języku każdej bazy danych. Raport wymienia je z nazwy i nigdy nie pomija ich po cichu, więc możesz je przepisać dla Oracle.

## Pytania o konwersję MySQL do Oracle

### Czy mój zrzut jest wysyłany?

Nie. Konwerter działa w przeglądarce i odczytuje zrzut z dysku po kawałku, więc nigdy nie opuszcza on twojego komputera. Aplikacja na komputer i wiersz poleceń też konwertują na twoim komputerze.

### Jak duży może być zrzut?

Konwerter nigdy nie trzyma całego zrzutu w pamięci: czyta plik dwa razy, fragmentami, i zapisuje skrypt na bieżąco. Zrzuty wielogigabajtowe konwertują się w przeglądarce, w aplikacji na komputer i w wierszu poleceń.

### Czy odczytuje zrzuty MariaDB?

Tak. Zrzuty z mariadb-dump i z MariaDB od 10.3 do 12 są konwertowane tak samo, łącznie z kolumnami INET6, INET4 i UUID z MariaDB.

### Co dzieje się z datami 0000-00-00?

Oracle nie ma daty zerowej, więc stają się NULL, a kolumna przyjmuje NULL. Raport podaje, ile ich było w każdej kolumnie. Puste ciągi też stają się NULL, bo tak zapisuje je Oracle.

### Czy wartości AUTO_INCREMENT są zachowywane?

Tak. Każda kolumna AUTO_INCREMENT staje się kolumną identity, każdy wiersz zachowuje swoje id, a kolejne id idzie po najwyższym albo po AUTO_INCREMENT tabeli, jeśli ten jest wyższy.

### Czy TINYINT(1) staje się boolean?

Oracle przed 23ai nie ma kolumny logicznej. Kolumna, której wszystkie wartości to 0 lub 1, staje się NUMBER(1) z ograniczeniem CHECK, które to utrzymuje; kolumna z innymi liczbami je zachowuje, a raport wyjaśnia dlaczego.

### A procedury składowane i wyzwalacze?

Raport wymienia je z nazwy, ale nie są konwertowane, bo każda baza danych zapisuje je we własnym języku. Wyjątkiem jest ON UPDATE CURRENT_TIMESTAMP: staje się wyzwalaczem Oracle.

### Na jakich wersjach Oracle ładuje się skrypt?

Oracle 19c i nowsze. Każdy testowy zrzut ładuje się na 21c i 23ai i zatrzymuje przy pierwszym błędzie, jeśli coś pójdzie nie tak.

## Z MySQL

- [MySQL do PostgreSQL](https://intosql.com/pl/mysql-do-postgresql)
- [MySQL do MySQL](https://intosql.com/pl/mysql-do-mysql)
- [MySQL do MariaDB](https://intosql.com/pl/mysql-do-mariadb)
- [MySQL do SQLite](https://intosql.com/pl/mysql-do-sqlite)
- [MySQL do SQL Server](https://intosql.com/pl/mysql-do-sql-server)

## Do Oracle

- [MariaDB do Oracle](https://intosql.com/pl/mariadb-do-oracle)
- [PostgreSQL do Oracle](https://intosql.com/pl/postgresql-do-oracle)
- [SQL Server do Oracle](https://intosql.com/pl/sql-server-do-oracle)
- [SQLite do Oracle](https://intosql.com/pl/sqlite-do-oracle)
- [Oracle do Oracle](https://intosql.com/pl/oracle-do-oracle)

## Przewodnik i każda para

- [Oracle do MySQL](https://intosql.com/pl/oracle-do-mysql)
- [Przewodnik migracji MySQL do Oracle](https://intosql.com/docs/migrations/mysql-to-oracle)
- [Typy danych z MySQL do Oracle](https://intosql.com/docs/types/mysql-to-oracle)
- [Każda para baz danych](https://intosql.com/pl/migracja-bazy-danych)
