Langsung ke konten
Beranda IntoSQL

Konversi Oracle ke MySQL

Letakkan file .sql yang ditulis Database Export di SQL Developer atau SQLcl, dengan tabel dan pernyataan Insert-nya, lalu unduh skrip MySQL dengan tabel, kunci, indeks, dan data yang sama. Setiap nilai yang tidak bisa disimpan MySQL apa adanya, dan setiap objek yang tidak didukungnya, dicantumkan di laporan.

File Anda
sqlshop_2024_oracle.sqlFile contoh, 9,3 kB
Database Anda

18 baris dikonversi, tanpa perbaikan, tidak ada yang ditolak

Tampilkan

Tabel di shop_2024_oracle.sqlDump Oracle · ditulis oleh SQL Developer · utf-8

  • customers8 baris
    7 kolom
    idbigint not null
    namevarchar(100) not null
    emailvarchar(150) not null
    countrychar(2) not null
    is_activesmallint not null
    signed_updatetime
    created_atdatetime not null
  • orders10 baris
    9 kolom
    idbigint not null
    customer_idbigint not null
    invoicebigint
    statusvarchar(10) not null
    totaldecimal(10,2) not null
    itemsint not null
    ordered_atdatetime not null
    shipped_atdatetime
    notevarchar(255)
-- Written by IntoSQL from a Oracle dump. Load it with: mysql --default-character-set=utf8mb4 <database> < <file>
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO,ALLOW_INVALID_DATES';

CREATE TABLE `customers` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `email` varchar(150) NOT NULL,
  `country` char(2) NOT NULL DEFAULT 'US',
  `is_active` smallint NOT NULL DEFAULT 1,
  `signed_up` datetime,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `customers_email_uk` (`email`),
  CONSTRAINT `check1` CHECK (`is_active` IN (0, 1))
) AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='People who bought at least once';

CREATE TABLE `orders` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `customer_id` bigint NOT NULL,
  `invoice` bigint,
  `status` varchar(10) NOT NULL DEFAULT 'pending',
  `total` decimal(10,2) NOT NULL,
  `items` int NOT NULL DEFAULT 1,
  `ordered_at` datetime NOT NULL,
  `shipped_at` datetime,
  `note` varchar(255),
  PRIMARY KEY (`id`),
  KEY `orders_status_date_ix` (`status`,`ordered_at`),
  CONSTRAINT `check1` CHECK (`status` IN ('pending', 'paid', 'shipped', 'cancelled')),
  CONSTRAINT `orders_customer_fk` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`)
) AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (1,'Ana Martínez','ana@example.com','MX',1,'2023-01-15 00:00:00','2023-01-15 10:24:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (2,'Zoë Müller','zoe@example.de','DE',1,'2023-02-03 00:00:00','2023-02-03 08:11:42.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (3,'José Peña','jose@example.es','ES',0,'2023-03-21 00:00:00','2023-03-21 19:05:17.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (4,'李雷','lilei@example.cn','CN',1,'2023-05-09 00:00:00','2023-05-09 02:40:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (5,'Noah O\'Brien','noah@example.ie','IE',1,NULL,'2023-06-30 14:00:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (6,'Amélie Laurent','amelie@example.fr','FR',1,'2024-01-02 00:00:00','2024-01-02 09:30:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (7,'Ravi Patel','ravi@example.in','IN',0,'2024-02-29 00:00:00','2024-02-29 23:59:59.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'2024-04-12 00:00:00','2024-04-12 12:12:12.000000');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (1,1,1000,'shipped',129.9,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL);
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (2,2,1001,'paid',54,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (3,1,1002,'cancelled',12.5,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (4,4,1003,'shipped',980,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (5,5,1004,'pending',45.75,2,'2024-03-08 17:20:00',NULL,'Leave at the door; ring twice');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (6,6,1005,'shipped',310.4,5,'2024-03-10 13:00:00','2024-03-11 09:00:00','Fragile: "glass"');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (7,8,1006,'paid',76.2,2,'2024-03-11 18:45:00',NULL,NULL);
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (8,2,1007,'paid',19.99,1,'2024-03-12 08:00:00',NULL,'Paid at the counter');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (9,3,1008,'shipped',64,2,'2024-03-14 15:30:00',NULL,'Shipping date never recorded');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (10,7,1009,'paid',1499,1,'2024-03-15 21:05:00',NULL,'C:\\Users\\ravi\\invoice.pdf');

SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;

Perbaikan

Tidak ada yang perlu diperbaiki.

Perlu diperiksa

  • 1 sequence tidak dibuat; MySQL tidak punya sequence. Simpan nilai berikutnya di sebuah tabel jika aplikasi Anda memerlukannya.
  • Default "invoice" di orders tidak bisa ditulis untuk MySQL (a sequence), jadi kolom itu tanpa default. Tambahkan default secara manual jika baris baru memerlukannya.

File Anda dikonversi di komputer ini dan tidak pernah diunggah.

Contoh lain:

Yang berubah dari Oracle ke MySQL

Setiap baris adalah aturan yang diterapkan konverter, beserta baris laporan yang ditulisnya saat aturan itu mengubah sesuatu di data Anda.

  • BOOLEAN (23ai)

    tinyint(1)

    MySQL tidak punya kolom boolean, jadi TRUE dan FALSE menjadi 1 dan 0.

  • VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG

    varchar(n) hingga 1024 karakter, tipe text di atasnya

    Panjang dihitung dalam karakter, baik Oracle menghitung byte maupun karakter, jadi setiap nilai muat.

  • NUMBER, NUMBER(p,s), FLOAT(b)

    decimal(p,s), atau bigint

    NUMBER mempertahankan setiap digit; NUMBER tanpa presisi yang semua nilainya bilangan bulat hingga 18 digit menjadi integer 64-bit, dan skala negatif memuat digit sebanyak itu sebelum titik desimal.

  • INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND

    varchar(100) berisi teks Oracle, misalnya +01-06

    TIME di MySQL memuat durasi hingga 838 jam, dan tidak punya tahun atau bulan; teksnya mempertahankan setiap bagian.

    Baris laporan: type_replaced

  • DATE, TIMESTAMP(p)

    datetime(p)

    DATE di Oracle memuat waktu hingga detik, jadi merupakan tanggal dan waktu. Ekspor dalam sesi Amerika atau Jerman menulis tanggal tanpa jam atau abadnya (DD-MON-RR); ekspor dalam sesi ISO (SYYYY-MM-DD HH24:MI:SS) agar keduanya tetap ada.

  • TIMESTAMP(7) to TIMESTAMP(9)

    enam digit detik, digit ketujuh dipotong

    MySQL menyimpan mikrodetik; digit ketujuh (100 nanodetik) dipotong, tidak pernah dibulatkan, jadi tidak ada nilai yang bergeser ke detik atau hari berikutnya.

    Baris laporan: fraction_cut

  • TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE

    datetime(p) dalam UTC

    TIMESTAMP di MySQL hanya sampai 2038, jadi momen disimpan sebagai datetime dalam UTC, momen yang sama apa pun offset setiap nilai.

    Baris laporan: moments_as_utc

  • JSON (21c), and CLOB holding JSON

    json

    Nilai JSON yang sama; NULL SQL yang ditulis ekspor sebagai 'null' tetap NULL.

  • BLOB, RAW(n), LONG RAW

    binary(n), varbinary(n), dan tipe blob

    Byte tetap byte.

  • ROWID, UROWID, XMLTYPE, SDO_GEOMETRY

    text

    Tipe khusus Oracle tidak punya padanan; nilainya mempertahankan teksnya, termasuk nilai ROWID, meski tidak bermakna di luar Oracle.

    Baris laporan: type_replaced

  • collations that ignore case (BINARY_CI)

    perbandingan persis (utf8mb4_bin)

    Tabel memakai utf8mb4_bin agar unique key membedakan apa yang dibedakan Oracle; kolom yang mengabaikan huruf besar dan kecil kehilangan sifat itu. Aturan aksen berbeda antarversi, jadi tidak ada collation _ci yang cocok dengan milik Oracle di semua versi.

    Baris laporan: case_insensitive_collation

  • identity columns, and a sequence a BEFORE INSERT trigger assigns

    AUTO_INCREMENT, berlanjut setelah id tertinggi

    Id yang disalin dimuat apa adanya, dan penghitung berlanjut setelah id tertinggi. Kolom yang diisi trigger dari sequence (cara sebelum 12c) juga menjadi identity.

  • identity columns the target can't count

    bilangan bulat biasa

    MySQL menghitung satu kolom per tabel, di awal sebuah key; kolom lain mempertahankan nilainya tanpa penghitung.

    Baris laporan: counter_dropped

  • CREATE SEQUENCE

    tidak dibuat

    Ekspor menulis posisi yang sudah dicapai sequence sebagai START WITH-nya, jadi sequence berlanjut dari sana.

    Baris laporan: sequence_not_converted

  • virtual columns (GENERATED ALWAYS AS ... VIRTUAL)

    kolom generated, STORED jika PERSISTED, selain itu VIRTUAL

    MySQL menghitungnya dari rumus yang sama; nilai yang ditulis ekspor untuknya tidak disertakan.

  • virtual columns with functions IntoSQL doesn't write, and the || operator

    kolom biasa

    Rumus yang tidak bisa ditulis untuk MySQL menyisakan kolom biasa dan satu baris laporan; nilai yang ditulis ekspor untuk kolom virtual tidak disertakan, dan MySQL tidak punya apa pun untuk dihitung.

    Baris laporan: generated_not_translated

  • defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)

    tanpa default

    Default yang tidak bisa ditulis dihilangkan dan dilaporkan.

    Baris laporan: default_not_translated

  • CHECK constraints

    diterjemahkan

    MySQL 5.7 menyimpannya tanpa memeriksa; versi lain mengujinya saat setiap baris dimuat.

  • CHECK constraints with functions IntoSQL doesn't write

    tidak dibuat

    CHECK yang tidak bisa ditulis dihilangkan dan dilaporkan.

    Baris laporan: check_skipped

  • CHECK constraints that are DISABLE or ENABLE NOVALIDATE

    tidak dibuat

    Oracle tidak menerapkan CHECK ini pada baris yang sudah ada, jadi baris bisa melanggarnya.

    Baris laporan: check_not_enforced

  • function-based, bitmap and domain indexes

    tidak dibuat

    IntoSQL menulis indeks b-tree pada kolom utuh; buat ulang indeks lainnya setelah pemuatan.

    Baris laporan: index_skipped

  • foreign keys

    foreign key, dimuat dengan FOREIGN_KEY_CHECKS=0

    Baris dimuat dalam urutan apa pun, dan key memeriksa baris baru sesudahnya.

  • foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones

    tidak dibuat

    Key tidak bisa merujuk ke tabel yang tidak ada, dan key yang tidak diperiksa Oracle bisa punya baris tanpa induk.

    Baris laporan: foreign_key_skipped

  • partitioned tables

    satu tabel dengan baris dari setiap partisi

    Barisnya sama; partisi ulang tabel di MySQL jika diperlukan.

    Baris laporan: partitions_dropped

  • several schemas in one export

    satu database, nama tabel diawali nama skemanya

    Schema di MySQL adalah database, yang tidak bisa dibuat oleh ekspor yang dimuat ke satu database; ekspor satu schema mempertahankan nama tabelnya.

    Baris laporan: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL dihapus

    Kolom yang nilainya harus menjadi NULL tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti.

    Baris laporan: not_null_relaxed

  • views, synonyms, types, packages, procedures, functions and other triggers

    dicantumkan di laporan

    Kodenya ditulis dalam PL/SQL, jadi dicantumkan agar Anda bisa membuatnya ulang.

    Baris laporan: not_converted_objects

  • exports without CREATE TABLE (data only)

    tipe dibaca dari nilai

    Ekspor yang hanya berisi data hanya punya baris, jadi tipenya diambil dari nilai.

    Baris laporan: no_schema

  • expressions in INSERT values other than the ones exports write

    NULL

    Konverter yang tidak menjalankan database tidak bisa mengevaluasinya; to_date, to_timestamp, TO_CLOB, HEXTORAW, dan fungsi lain yang ditulis ekspor tetap dibaca.

    Baris laporan: expression_value

  • types IntoSQL doesn't know, and object types

    longtext

    Text memuat nilai apa pun; ubah tipenya setelah pemuatan.

    Baris laporan: unknown_type

  • dates before year 1 and time zones given as region names

    NULL

    MySQL menyimpan tahun 1000 sampai 9999, sedangkan Oracle mundur sampai tahun 1. Nilai itu menjadi NULL dan laporan menghitungnya.

    Baris laporan: date_out_of_range

  • NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE

    NULL

    Tipe floating-point di MySQL tidak punya NaN atau infinity, jadi nilai itu menjadi NULL dan laporan menghitungnya.

    Baris laporan: invalid_value_null

  • NUL characters in text

    dipertahankan

    Nilainya disalin dengan karakter NUL di-escape.

  • text that isn't valid in its encoding

    byte yang rusak menjadi karakter pengganti

    Skripnya UTF-8 dan setiap nilai harus berupa teks yang valid.

    Baris laporan: invalid_utf8_replaced

  • text decoded twice (ñ)

    disalin apa adanya

    Skrip berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.

    Baris laporan: mojibake_suspected

Di OracleDi MySQLBaris laporan
BOOLEAN (23ai)tinyint(1)MySQL tidak punya kolom boolean, jadi TRUE dan FALSE menjadi 1 dan 0.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONGvarchar(n) hingga 1024 karakter, tipe text di atasnyaPanjang dihitung dalam karakter, baik Oracle menghitung byte maupun karakter, jadi setiap nilai muat.
NUMBER, NUMBER(p,s), FLOAT(b)decimal(p,s), atau bigintNUMBER mempertahankan setiap digit; NUMBER tanpa presisi yang semua nilainya bilangan bulat hingga 18 digit menjadi integer 64-bit, dan skala negatif memuat digit sebanyak itu sebelum titik desimal.
INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECONDvarchar(100) berisi teks Oracle, misalnya +01-06TIME di MySQL memuat durasi hingga 838 jam, dan tidak punya tahun atau bulan; teksnya mempertahankan setiap bagian.type_replaced
DATE, TIMESTAMP(p)datetime(p)DATE di Oracle memuat waktu hingga detik, jadi merupakan tanggal dan waktu. Ekspor dalam sesi Amerika atau Jerman menulis tanggal tanpa jam atau abadnya (DD-MON-RR); ekspor dalam sesi ISO (SYYYY-MM-DD HH24:MI:SS) agar keduanya tetap ada.
TIMESTAMP(7) to TIMESTAMP(9)enam digit detik, digit ketujuh dipotongMySQL menyimpan mikrodetik; digit ketujuh (100 nanodetik) dipotong, tidak pernah dibulatkan, jadi tidak ada nilai yang bergeser ke detik atau hari berikutnya.fraction_cut
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONEdatetime(p) dalam UTCTIMESTAMP di MySQL hanya sampai 2038, jadi momen disimpan sebagai datetime dalam UTC, momen yang sama apa pun offset setiap nilai.moments_as_utc
JSON (21c), and CLOB holding JSONjsonNilai JSON yang sama; NULL SQL yang ditulis ekspor sebagai 'null' tetap NULL.
BLOB, RAW(n), LONG RAWbinary(n), varbinary(n), dan tipe blobByte tetap byte.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRYtextTipe khusus Oracle tidak punya padanan; nilainya mempertahankan teksnya, termasuk nilai ROWID, meski tidak bermakna di luar Oracle.type_replaced
collations that ignore case (BINARY_CI)perbandingan persis (utf8mb4_bin)Tabel memakai utf8mb4_bin agar unique key membedakan apa yang dibedakan Oracle; kolom yang mengabaikan huruf besar dan kecil kehilangan sifat itu. Aturan aksen berbeda antarversi, jadi tidak ada collation _ci yang cocok dengan milik Oracle di semua versi.case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assignsAUTO_INCREMENT, berlanjut setelah id tertinggiId yang disalin dimuat apa adanya, dan penghitung berlanjut setelah id tertinggi. Kolom yang diisi trigger dari sequence (cara sebelum 12c) juga menjadi identity.
identity columns the target can't countbilangan bulat biasaMySQL menghitung satu kolom per tabel, di awal sebuah key; kolom lain mempertahankan nilainya tanpa penghitung.counter_dropped
CREATE SEQUENCEtidak dibuatEkspor menulis posisi yang sudah dicapai sequence sebagai START WITH-nya, jadi sequence berlanjut dari sana.sequence_not_converted
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)kolom generated, STORED jika PERSISTED, selain itu VIRTUALMySQL menghitungnya dari rumus yang sama; nilai yang ditulis ekspor untuknya tidak disertakan.
virtual columns with functions IntoSQL doesn't write, and the || operatorkolom biasaRumus yang tidak bisa ditulis untuk MySQL menyisakan kolom biasa dan satu baris laporan; nilai yang ditulis ekspor untuk kolom virtual tidak disertakan, dan MySQL tidak punya apa pun untuk dihitung.generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)tanpa defaultDefault yang tidak bisa ditulis dihilangkan dan dilaporkan.default_not_translated
CHECK constraintsditerjemahkanMySQL 5.7 menyimpannya tanpa memeriksa; versi lain mengujinya saat setiap baris dimuat.
CHECK constraints with functions IntoSQL doesn't writetidak dibuatCHECK yang tidak bisa ditulis dihilangkan dan dilaporkan.check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATEtidak dibuatOracle tidak menerapkan CHECK ini pada baris yang sudah ada, jadi baris bisa melanggarnya.check_not_enforced
function-based, bitmap and domain indexestidak dibuatIntoSQL menulis indeks b-tree pada kolom utuh; buat ulang indeks lainnya setelah pemuatan.index_skipped
foreign keysforeign key, dimuat dengan FOREIGN_KEY_CHECKS=0Baris dimuat dalam urutan apa pun, dan key memeriksa baris baru sesudahnya.
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE onestidak dibuatKey tidak bisa merujuk ke tabel yang tidak ada, dan key yang tidak diperiksa Oracle bisa punya baris tanpa induk.foreign_key_skipped
partitioned tablessatu tabel dengan baris dari setiap partisiBarisnya sama; partisi ulang tabel di MySQL jika diperlukan.partitions_dropped
several schemas in one exportsatu database, nama tabel diawali nama skemanyaSchema di MySQL adalah database, yang tidak bisa dibuat oleh ekspor yang dimuat ke satu database; ekspor satu schema mempertahankan nama tabelnya.schemas_merged
NOT NULL columns with values that become NULLNOT NULL dihapusKolom yang nilainya harus menjadi NULL tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti.not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggersdicantumkan di laporanKodenya ditulis dalam PL/SQL, jadi dicantumkan agar Anda bisa membuatnya ulang.not_converted_objects
exports without CREATE TABLE (data only)tipe dibaca dari nilaiEkspor yang hanya berisi data hanya punya baris, jadi tipenya diambil dari nilai.no_schema
expressions in INSERT values other than the ones exports writeNULLKonverter yang tidak menjalankan database tidak bisa mengevaluasinya; to_date, to_timestamp, TO_CLOB, HEXTORAW, dan fungsi lain yang ditulis ekspor tetap dibaca.expression_value
types IntoSQL doesn't know, and object typeslongtextText memuat nilai apa pun; ubah tipenya setelah pemuatan.unknown_type
dates before year 1 and time zones given as region namesNULLMySQL menyimpan tahun 1000 sampai 9999, sedangkan Oracle mundur sampai tahun 1. Nilai itu menjadi NULL dan laporan menghitungnya.date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLENULLTipe floating-point di MySQL tidak punya NaN atau infinity, jadi nilai itu menjadi NULL dan laporan menghitungnya.invalid_value_null
NUL characters in textdipertahankanNilainya disalin dengan karakter NUL di-escape.
text that isn't valid in its encodingbyte yang rusak menjadi karakter penggantiSkripnya UTF-8 dan setiap nilai harus berupa teks yang valid.invalid_utf8_replaced
text decoded twice (ñ)disalin apa adanyaSkrip berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.mojibake_suspected

Muat skrip ke MySQL

Skrip membuat tabel, menyalin baris, lalu menambahkan kunci, indeks, dan foreign key, jadi pemuatan berjalan cepat dan berhenti di galat pertama.

mysql --default-character-set=utf8mb4 mydb < oracle.mysql.sql

Foreign key dibuat seperti yang dideklarasikan dump, dengan FOREIGN_KEY_CHECKS=0 selama baris dimuat, jadi baris yang merujuk ke baris yang tidak ada tidak menghentikan pemuatan.

Untuk dump yang besar, jalankan klien di mesin yang sama dengan server, dan naikkan max_allowed_packet jika satu baris sangat besar.

IntoSQL Pro memuat file langsung ke MySQL dari aplikasi desktop atau command line, tanpa menulis skrip.

Buat dump Oracle untuk hasil terbaik

Konverter membaca apa yang ada di dump. Opsi berikut membuat lebih banyak data Anda tetap ada di dalamnya:

  • Di SQL Developer, pilih Tools, Database Export, dengan DDL dan format data Insert. SQLcl menulis hal yang sama dengan SET SQLFORMAT INSERT.
  • Jalankan ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' sebelum mengekspor: format default menulis tanggal tanpa jam atau abadnya.
  • File .dmp dari exp atau expdp bersifat biner: impor ke database Oracle, misalnya Oracle Database Free di Docker, lalu ekspor dengan SQL Developer.

Yang tidak dikonversi

View, paket, prosedur, fungsi, trigger, tipe, dan sinonim ditulis dalam PL/SQL. Semuanya dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, sehingga Anda bisa menulis ulang untuk MySQL.

Pertanyaan tentang Oracle ke MySQL

Tidak terjawab di sini? Tulis ke kami dari halaman kontak, dan seseorang akan membalas. Halaman kontak

Apakah dump saya diunggah?

Tidak. Konverter berjalan di browser Anda dan membaca dump dari disk Anda sepotong demi sepotong, jadi dump tidak pernah meninggalkan komputer Anda. Aplikasi desktop dan command line juga mengonversi di komputer Anda.

Seberapa besar dump yang bisa dipakai?

Konverter tidak pernah menyimpan seluruh dump di memori: file dibaca dua kali, per rentang, dan skrip ditulis sambil berjalan. Dump berukuran beberapa gigabyte bisa dikonversi di browser, di aplikasi desktop, dan dengan command line.

Bisakah saya mengonversi file .dmp dari exp atau expdp?

Tidak secara langsung: Data Pump dan Export versi asli menulis format biner yang hanya bisa dibaca Oracle. Impor ke database Oracle mana pun, Oracle Database Free berjalan di Docker, lalu ekspor dengan Database Export di SQL Developer atau SQLcl. Konverter memberi tahu hal ini saat menerima file .dmp.

Ekspor dari versi Oracle mana yang bisa dipakai?

Ekspor dari SQL Developer dan SQLcl, dengan definisi tabel dari DBMS_METADATA, dari Oracle 11g ke atas. Setiap ekspor uji berasal dari Oracle 21c dan 23ai, dalam sesi Amerika, Jerman, dan ISO, dan dibandingkan dengan sumbernya sel demi sel.

Apa yang terjadi pada NUMBER, DATE, dan tipe Oracle lainnya?

NUMBER menjadi decimal, atau bigint untuk bilangan bulat, dan teks di atas 65 digit; DATE menjadi datetime, dengan waktunya tetap ada; CLOB menjadi longtext, BLOB menjadi blob, dan interval mempertahankan teks Oracle. NaN dan Infinity menjadi NULL dan laporan menghitungnya.

Apakah kolom identity dan sequence dipertahankan?

Kolom identity menjadi AUTO_INCREMENT dan berlanjut setelah id tertinggi. MySQL tidak punya sequence, jadi sequence dilaporkan, begitu pula nilai default yang mengambil darinya.

Bagaimana dengan paket PL/SQL, prosedur, dan trigger?

Semuanya dicantumkan di laporan berdasarkan nama dan tidak dikonversi, karena setiap database menulisnya dalam bahasanya sendiri.

Di versi MySQL mana skrip bisa dimuat?

MySQL 5.7 dan yang lebih baru. Setiap ekspor uji dimuat di 5.7 dan 9, dan berhenti di galat pertama jika ada yang salah.