Przejdź do treści
Strona główna IntoSQL

Konwertuj MariaDB do MySQL

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

Twój plik
sqlshop_2024_mariadb.sqlPlik przykładowy, 6,6 kB
Twoja baza danych

18 wierszy przekonwertowanych, 4 poprawki, brak odrzuconych

Pokaż

Tabele w pliku shop_2024_mariadb.sqlZrzut MariaDB 11.8.9-MariaDB-ubu2404 · zapisany przez mariadb-dump · utf8mb4

  • customers8 wierszy2
    8 kolumn
    idint(10) unsigned not null
    namevarchar(100) not null
    emailvarchar(150) not null
    countrychar(2) not null
    is_activetinyint(1) not null
    signed_update not null
    created_attimestamp not null
    last_ipvarchar(39)
  • orders10 wierszy2
    12 kolumn
    idint(10) unsigned not null
    customer_idint(10) unsigned not null
    statusenum('pending','paid','shipped','cancelled') not null
    totaldecimal(10,2) not null
    itemssmallint(5) unsigned not null
    ordered_atdatetime not null
    shipped_atdatetime
    notevarchar(255)
    order_refchar(36) not null
    invoiceint(11) not null
    detailsjson
    updated_attimestamp not null
-- Written by IntoSQL from a MySQL dump. Load it with: mysql --default-character-set=utf8mb4 <database> < <file>
SET NAMES utf8mb4;
SET TIME_ZONE = '+00:00';
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO,ALLOW_INVALID_DATES';

CREATE TABLE `customers` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `email` varchar(150) NOT NULL,
  `country` char(2) NOT NULL DEFAULT 'US',
  `is_active` tinyint(1) NOT NULL DEFAULT 1,
  `signed_up` date NOT NULL DEFAULT '0000-00-00',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_ip` varchar(39) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci COMMENT='People who bought at least once';

CREATE TABLE `orders` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `customer_id` int(10) unsigned NOT NULL,
  `status` enum('pending','paid','shipped','cancelled') NOT NULL DEFAULT 'pending',
  `total` decimal(10,2) NOT NULL,
  `items` smallint(5) unsigned NOT NULL DEFAULT 1,
  `ordered_at` datetime NOT NULL,
  `shipped_at` datetime DEFAULT NULL,
  `note` varchar(255) DEFAULT NULL,
  `order_ref` char(36) NOT NULL,
  `invoice` int(11) NOT NULL,
  `details` json DEFAULT NULL,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_customer` (`customer_id`),
  KEY `idx_status_date` (`status`,`ordered_at`),
  CONSTRAINT `fk_orders_customer` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`,`last_ip`) VALUES (1,'Ana Martínez','ana@example.com','MX',1,'2023-01-15','2023-01-15 10:24:00','::ffff:203.0.113.7'),(2,'Zoë Müller','zoe@example.de','DE',1,'2023-02-03','2023-02-03 08:11:42','2001:db8::1'),(3,'José Peña','jose@example.es','ES',0,'2023-03-21','2023-03-21 19:05:17',NULL),(4,'李雷','lilei@example.cn','CN',1,'2023-05-09','2023-05-09 02:40:00','::ffff:198.51.100.23'),(5,'Noah O\'Brien','noah@example.ie','IE',1,'0000-00-00','2023-06-30 14:00:00',NULL),(6,'Amélie Laurent','amelie@example.fr','FR',1,'2024-01-02','2024-01-02 09:30:00','2001:db8:85a3::8a2e:370:7334'),(7,'Ravi Patel','ravi@example.in','IN',0,'2024-02-29','2024-02-29 23:59:59','::ffff:192.0.2.200'),(8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'2024-04-12','2024-04-12 12:12:12',NULL);
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`order_ref`,`invoice`,`details`,`updated_at`) VALUES (1,1,'shipped',129.90,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL,'0b7a4c2e-3f1d-4e8a-9c55-1a2b3c4d5e6f',1000,'{\"gift\": false}','2024-03-02 16:30:00'),(2,2,'paid',54.00,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁','1c8b5d3f-4a2e-4f9b-8d66-2b3c4d5e6f70',1001,'{\"gift\": true, \"wrap\": \"red\"}','2024-03-02 11:20:00'),(3,1,'cancelled',12.50,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind','2d9c6e4a-5b3f-4a0c-9e77-3c4d5e6f7081',1002,NULL,'2024-03-03 10:00:00'),(4,4,'shipped',980.00,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放','3e0d7f5b-6c4a-4b1d-8f88-4d5e6f708192',1003,'{\"fragile\": true}','2024-03-07 08:00:00'),(5,5,'pending',45.75,2,'2024-03-08 17:20:00',NULL,'Leave at the door; ring twice','4f1e806c-7d5b-4c2e-9a99-5e6f708192a3',1004,NULL,'2024-03-08 17:20:00'),(6,6,'shipped',310.40,5,'2024-03-10 13:00:00','2024-03-11 09:00:00','Fragile: \"glass\"','50f2917d-8e6c-4d3f-8baa-6f708192a3b4',1005,'{\"fragile\": true}','2024-03-11 09:00:00'),(7,8,'paid',76.20,2,'2024-03-11 18:45:00',NULL,NULL,'6103a28e-9f7d-4e40-9cbb-708192a3b4c5',1006,NULL,'2024-03-11 18:46:00'),(8,2,'',19.99,1,'2024-03-12 08:00:00',NULL,'Status lost in an old import','7214b39f-a08e-4f51-8dcc-8192a3b4c5d6',1007,NULL,'2024-03-12 08:00:00'),(9,3,'shipped',64.00,2,'2024-03-14 15:30:00','0000-00-00 00:00:00','Shipping date never recorded','8325c4a0-b19f-4062-9edd-92a3b4c5d6e7',1008,'{\"parcels\": [1, 2]}','2024-03-15 10:00:00'),(10,7,'paid',1499.00,1,'2024-03-15 21:05:00',NULL,'C:\\Users\\ravi\\invoice.pdf','9436d5b1-c2a0-4173-8fee-a3b4c5d6e7f8',1009,NULL,'2024-03-15 21:05:00');

SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;

Poprawki

  1. customers używa porównywania utf8mb4_uca1400_ai_ci, którego MySQL nie ma, więc używa utf8mb4_unicode_520_ci; tekst może się sortować i porównywać trochę inaczej.
  2. "last_ip" w tabeli customers to inet6, czego MySQL nie ma, więc ma typ varchar(39) z tymi samymi wartościami.
  3. orders używa porównywania utf8mb4_uca1400_ai_ci, którego MySQL nie ma, więc używa utf8mb4_unicode_520_ci; tekst może się sortować i porównywać trochę inaczej.
  4. "order_ref" w tabeli orders to uuid, czego MySQL nie ma, więc ma typ char(36) z tymi samymi wartościami.

Do sprawdzenia

  • Pominięto 1 sekwencję; MySQL nie ma sekwencji. Przechowuj następną wartość w tabeli, jeśli twoja aplikacja jej potrzebuje.
  • Wartości domyślnej "invoice" w tabeli orders nie da się zapisać dla MySQL (a sequence), więc kolumna nie ma wartości domyślnej. Dodaj wartość domyślną ręcznie, jeśli nowe wiersze jej potrzebują.

Plik jest konwertowany na tym komputerze i nigdy nie jest wysyłany.

Inne przykłady:

Co zmienia się między MariaDB a MySQL

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

  • utf8mb4_0900_* and utf8mb4_uca1400_* collations

    utf8mb4_unicode_520_ci (utf8mb4_bin dla binarnych)

    MySQL nie zna nowszych porównywań; to błąd, który zatrzymuje większość zrzutów MySQL 8 w innych bazach. unicode_520 najwierniej stosuje te same reguły Unicode.

    Wpis w raporcie: collation_replaced

  • zero, partial or impossible dates (0000-00-00, 2024-02-30)

    zachowane

    Skrypt ładuje się z ALLOW_INVALID_DATES i bez NO_ZERO_DATE, więc MySQL zachowuje te same wartości, które miało źródło.

  • TIME

    TIME, łącznie z czasami trwania

    Ten sam typ, z tym samym zakresem.

  • TINYINT(1), BOOL

    TINYINT(1)

    Ten sam typ z tymi samymi wartościami.

  • UNSIGNED and ZEROFILL

    zachowane

    Te same typy.

  • ENUM and SET, the '' error value included

    zachowane

    Te same typy; skrypt ładuje się bez trybu ścisłego, więc wartość błędu ładuje się bez zmian.

  • JSON

    JSON

    MySQL odczytuje ten sam tekst JSON.

  • NUL bytes in text

    zachowane

    Wartość jest kopiowana z tą samą sekwencją ucieczki, której użyło źródło.

  • AUTO_INCREMENT

    AUTO_INCREMENT z licznikiem tabeli

    Licznik idzie dalej od miejsca, w którym zostawiło go źródło, łącznie z licznikami grup w MyISAM.

  • MyISAM AUTO_INCREMENT on the second column of a key, in a table that isn't MyISAM in the dump

    indeks na kolumnie i jeden licznik dla tabeli

    InnoDB liczy kolumnę tylko wtedy, gdy rozpoczyna ona indeks, i jednym licznikiem dla całej tabeli.

    Wpis w raporcie: myisam_group_autoincrement

  • ON UPDATE CURRENT_TIMESTAMP

    zachowane

    Ta sama klauzula, z ułamkami sekund kolumny.

  • generated columns

    VIRTUAL lub STORED jak w źródle

    Ta sama formuła, przetłumaczona element po elemencie.

  • generated columns with functions IntoSQL doesn't read

    zwykła kolumna

    Formuła, której IntoSQL nie potrafi odczytać, zostawia zwykłą kolumnę i wpis w raporcie.

    Wpis w raporcie: generated_not_translated

  • INVISIBLE columns

    zwykłe kolumny

    MySQL ma niewidoczne kolumny od 8.0.23, MariaDB od 10.3.

    Wpis w raporcie: invisible_column

  • CHECK constraints

    zachowane (MySQL 5.7 je parsuje i ignoruje)

    Te same ograniczenia CHECK, przetłumaczone element po elemencie.

  • CHECK constraints with functions IntoSQL doesn't read

    nie jest tworzone

    CHECK, którego IntoSQL nie odczyta, jest pomijany i zgłaszany.

    Wpis w raporcie: check_skipped

  • CHECK ... NOT ENFORCED

    nie jest tworzone

    MySQL 5.7 i MariaDB nie mogą zachować ograniczenia CHECK bez jego stosowania, a wiersze mogą je łamać.

    Wpis w raporcie: check_not_enforced

  • expression defaults, and defaults on TEXT, BLOB, JSON and GEOMETRY

    brak wartości domyślnej

    MySQL przyjmuje je od 8.0.13; skrypt ładuje się na 5.7, więc są pomijane i zgłaszane w raporcie. MariaDB je przyjmuje.

    Wpis w raporcie: default_not_translated

  • functional indexes, KEY ((expr))

    nie jest tworzony

    MySQL indeksuje wyrażenia od 8.0.13, a MariaDB wcale; kolumna generowana z indeksem robi to samo.

    Wpis w raporcie: index_skipped

  • keys and indexes on a prefix, c(20)

    zachowane

    Ten sam indeks.

  • FULLTEXT indexes

    zachowane

    Ten sam indeks; MATCH ... AGAINST działa jak wcześniej.

  • SPATIAL indexes

    zachowane

    Ten sam indeks.

  • foreign keys

    zachowane, ładowane z FOREIGN_KEY_CHECKS=0

    Te same klucze; wiersze ładują się tak jak ze zrzutu źródłowego.

  • GEOMETRY, POINT, POLYGON...

    zachowane, z SRID każdej wartości

    Kopiowane są własne bajty geometrii serwera, łącznie z SRID.

  • INET4, INET6, UUID (MariaDB)

    varchar(15), varchar(39), char(36)

    MySQL nie ma takich typów; tekst, który MariaDB dla nich zapisuje, jest zachowywany.

    Wpis w raporcie: type_replaced

  • BINARY, VARBINARY, BLOB

    zachowane

    Bajty pozostają bajtami.

  • PARTITION BY

    jedna tabela

    Wiersze są te same; jeśli trzeba, podziel tabelę na partycje ponownie.

    Wpis w raporcie: partitions_dropped

  • WITH SYSTEM VERSIONING (MariaDB)

    tabela z bieżącymi wierszami

    Zrzut zawiera tylko bieżące wiersze; MySQL nie ma wersjonowania systemowego.

    Wpis w raporcie: system_versioning_dropped

  • Aria, ColumnStore, CONNECT, Spider, RocksDB (MariaDB)

    InnoDB

    MySQL nie ma żadnego z tych silników. Każdy inny silnik jest zachowywany.

    Wpis w raporcie: engine_dropped

  • CREATE SEQUENCE (MariaDB)

    nie jest tworzone

    MySQL nie ma sekwencji.

    Wpis w raporcie: sequence_not_converted

  • views, triggers, procedures, functions and events

    wymienione w raporcie

    Trafiają na listę do ręcznego odtworzenia; ich kod często wskazuje definera i funkcje serwera.

    Wpis w raporcie: not_converted_objects

  • NOT NULL columns with values that become NULL

    NOT NULL usunięte

    Kolumna, której wartości musiały stać się NULL, nie może zachować NOT NULL, bo ładowanie by się zatrzymało.

    Wpis w raporcie: not_null_relaxed

  • text that isn't valid in its character set

    błędne bajty jako znak zastępczy

    Skrypt jest w UTF-8; bajty, które nim nie są, zatrzymałyby ładowanie.

    Wpis w raporcie: invalid_utf8_replaced

  • text decoded twice (ñ)

    skopiowane bez zmian

    Zrzut zawiera dokładnie te znaki, więc są kopiowane; raport je wskazuje.

    Wpis w raporcie: mojibake_suspected

  • dumps without CREATE TABLE

    typy odczytane z wartości

    Zrzut zrobiony z --no-create-info zawiera tylko wiersze, więc typy pochodzą z wartości.

    Wpis w raporcie: no_schema

  • geometries in a dump without CREATE TABLE

    GEOMETRY

    Format geometrii MySQL jest rozpoznawany po wartościach.

  • SET NAMES utf8 from utf8mb4 tables

    przekonwertowane, z ostrzeżeniem

    mysqldump z MySQL 5.x domyślnie zapisuje 3-bajtowe utf8 i zastępuje każde emoji znakiem zapytania, zanim jakikolwiek konwerter zobaczy plik.

    Wpis w raporcie: dump_lost_four_byte_chars

  • dumps without SET NAMES whose text isn't UTF-8

    odczytane jako Latin-1 (Windows-1252)

    latin1 w MySQL to Windows-1252, zwykłe kodowanie takich zrzutów.

    Wpis w raporcie: charset_guessed

  • sjis, cp932, gbk, big5 dumps

    odczytane jako UTF-8, z ostrzeżeniem

    Te kodowania nie są jeszcze dekodowane.

    Wpis w raporcie: unsupported_charset

  • UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows

    obliczone

    Niektóre narzędzia do zrzutów zapisują wartości jako takie wywołania; są odczytywane jako wartości, które zwracają.

  • other expressions in rows

    NULL

    Konwerter, który nie uruchamia bazy danych, nie może ich obliczyć.

    Wpis w raporcie: expression_value

  • DEFAULT in VALUES

    wartość domyślna kolumny

    Dosłowna wartość domyślna jest kopiowana do wiersza.

    Wpis w raporcie: default_keyword_filled

  • DEFAULT in VALUES without a literal default

    NULL

    Nie ma wartości do skopiowania.

    Wpis w raporcie: default_keyword_null

  • REPLACE and INSERT IGNORE

    zwykłe wiersze

    Zrzut ma jeden wiersz na klucz, więc wiersze są te same.

    Wpis w raporcie: replace_as_insert

  • types IntoSQL doesn't know

    LONGBLOB

    Blob mieści bajty dowolnej wartości; zmień typ po załadowaniu.

    Wpis w raporcie: unknown_type

  • values that don't fit their column

    NULL

    Uszkodzony lub ręcznie pisany zrzut może zawierać wartości, których kolumna nie przyjmie; stają się NULL, aby reszta się załadowała.

    Wpis w raporcie: invalid_value_null

  • unreadable geometries

    NULL

    Bajtów, które nie są geometrią, nie da się zapisać jako geometrii.

    Wpis w raporcie: bad_geometry

  • TIMESTAMP

    zachowane, ładowane w strefie czasowej podanej w zrzucie

    Skrypt ustawia tę samą strefę czasową co zrzut, więc każdy moment jest ten sam.

  • VECTOR(n) (MariaDB 11.7+)

    json z liczbami float jako tablicą

    MySQL 5.7 i 8.0 nie mają typu wektorowego; tablica JSON zachowuje każdą liczbę float w każdej wersji.

    Wpis w raporcie: type_replaced

W MariaDBW MySQLWpis w raporcie
utf8mb4_0900_* and utf8mb4_uca1400_* collationsutf8mb4_unicode_520_ci (utf8mb4_bin dla binarnych)MySQL nie zna nowszych porównywań; to błąd, który zatrzymuje większość zrzutów MySQL 8 w innych bazach. unicode_520 najwierniej stosuje te same reguły Unicode.collation_replaced
zero, partial or impossible dates (0000-00-00, 2024-02-30)zachowaneSkrypt ładuje się z ALLOW_INVALID_DATES i bez NO_ZERO_DATE, więc MySQL zachowuje te same wartości, które miało źródło.
TIMETIME, łącznie z czasami trwaniaTen sam typ, z tym samym zakresem.
TINYINT(1), BOOLTINYINT(1)Ten sam typ z tymi samymi wartościami.
UNSIGNED and ZEROFILLzachowaneTe same typy.
ENUM and SET, the '' error value includedzachowaneTe same typy; skrypt ładuje się bez trybu ścisłego, więc wartość błędu ładuje się bez zmian.
JSONJSONMySQL odczytuje ten sam tekst JSON.
NUL bytes in textzachowaneWartość jest kopiowana z tą samą sekwencją ucieczki, której użyło źródło.
AUTO_INCREMENTAUTO_INCREMENT z licznikiem tabeliLicznik idzie dalej od miejsca, w którym zostawiło go źródło, łącznie z licznikami grup w MyISAM.
MyISAM AUTO_INCREMENT on the second column of a key, in a table that isn't MyISAM in the dumpindeks na kolumnie i jeden licznik dla tabeliInnoDB liczy kolumnę tylko wtedy, gdy rozpoczyna ona indeks, i jednym licznikiem dla całej tabeli.myisam_group_autoincrement
ON UPDATE CURRENT_TIMESTAMPzachowaneTa sama klauzula, z ułamkami sekund kolumny.
generated columnsVIRTUAL lub STORED jak w źródleTa sama formuła, przetłumaczona element po elemencie.
generated columns with functions IntoSQL doesn't readzwykła kolumnaFormuła, której IntoSQL nie potrafi odczytać, zostawia zwykłą kolumnę i wpis w raporcie.generated_not_translated
INVISIBLE columnszwykłe kolumnyMySQL ma niewidoczne kolumny od 8.0.23, MariaDB od 10.3.invisible_column
CHECK constraintszachowane (MySQL 5.7 je parsuje i ignoruje)Te same ograniczenia CHECK, przetłumaczone element po elemencie.
CHECK constraints with functions IntoSQL doesn't readnie jest tworzoneCHECK, którego IntoSQL nie odczyta, jest pomijany i zgłaszany.check_skipped
CHECK ... NOT ENFORCEDnie jest tworzoneMySQL 5.7 i MariaDB nie mogą zachować ograniczenia CHECK bez jego stosowania, a wiersze mogą je łamać.check_not_enforced
expression defaults, and defaults on TEXT, BLOB, JSON and GEOMETRYbrak wartości domyślnejMySQL przyjmuje je od 8.0.13; skrypt ładuje się na 5.7, więc są pomijane i zgłaszane w raporcie. MariaDB je przyjmuje.default_not_translated
functional indexes, KEY ((expr))nie jest tworzonyMySQL indeksuje wyrażenia od 8.0.13, a MariaDB wcale; kolumna generowana z indeksem robi to samo.index_skipped
keys and indexes on a prefix, c(20)zachowaneTen sam indeks.
FULLTEXT indexeszachowaneTen sam indeks; MATCH ... AGAINST działa jak wcześniej.
SPATIAL indexeszachowaneTen sam indeks.
foreign keyszachowane, ładowane z FOREIGN_KEY_CHECKS=0Te same klucze; wiersze ładują się tak jak ze zrzutu źródłowego.
GEOMETRY, POINT, POLYGON...zachowane, z SRID każdej wartościKopiowane są własne bajty geometrii serwera, łącznie z SRID.
INET4, INET6, UUID (MariaDB)varchar(15), varchar(39), char(36)MySQL nie ma takich typów; tekst, który MariaDB dla nich zapisuje, jest zachowywany.type_replaced
BINARY, VARBINARY, BLOBzachowaneBajty pozostają bajtami.
PARTITION BYjedna tabelaWiersze są te same; jeśli trzeba, podziel tabelę na partycje ponownie.partitions_dropped
WITH SYSTEM VERSIONING (MariaDB)tabela z bieżącymi wierszamiZrzut zawiera tylko bieżące wiersze; MySQL nie ma wersjonowania systemowego.system_versioning_dropped
Aria, ColumnStore, CONNECT, Spider, RocksDB (MariaDB)InnoDBMySQL nie ma żadnego z tych silników. Każdy inny silnik jest zachowywany.engine_dropped
CREATE SEQUENCE (MariaDB)nie jest tworzoneMySQL nie ma sekwencji.sequence_not_converted
views, triggers, procedures, functions and eventswymienione w raporcieTrafiają na listę do ręcznego odtworzenia; ich kod często wskazuje definera i funkcje serwera.not_converted_objects
NOT NULL columns with values that become NULLNOT NULL usunięteKolumna, której wartości musiały stać się NULL, nie może zachować NOT NULL, bo ładowanie by się zatrzymało.not_null_relaxed
text that isn't valid in its character setbłędne bajty jako znak zastępczySkrypt jest w UTF-8; bajty, które nim nie są, zatrzymałyby ładowanie.invalid_utf8_replaced
text decoded twice (ñ)skopiowane bez zmianZrzut zawiera dokładnie te znaki, więc są kopiowane; raport je wskazuje.mojibake_suspected
dumps without CREATE TABLEtypy odczytane z wartościZrzut zrobiony z --no-create-info zawiera tylko wiersze, więc typy pochodzą z wartości.no_schema
geometries in a dump without CREATE TABLEGEOMETRYFormat geometrii MySQL jest rozpoznawany po wartościach.
SET NAMES utf8 from utf8mb4 tablesprzekonwertowane, z ostrzeżeniemmysqldump z MySQL 5.x domyślnie zapisuje 3-bajtowe utf8 i zastępuje każde emoji znakiem zapytania, zanim jakikolwiek konwerter zobaczy plik.dump_lost_four_byte_chars
dumps without SET NAMES whose text isn't UTF-8odczytane jako Latin-1 (Windows-1252)latin1 w MySQL to Windows-1252, zwykłe kodowanie takich zrzutów.charset_guessed
sjis, cp932, gbk, big5 dumpsodczytane jako UTF-8, z ostrzeżeniemTe kodowania nie są jeszcze dekodowane.unsupported_charset
UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rowsobliczoneNiektóre narzędzia do zrzutów zapisują wartości jako takie wywołania; są odczytywane jako wartości, które zwracają.
other expressions in rowsNULLKonwerter, który nie uruchamia bazy danych, nie może ich obliczyć.expression_value
DEFAULT in VALUESwartość domyślna kolumnyDosłowna wartość domyślna jest kopiowana do wiersza.default_keyword_filled
DEFAULT in VALUES without a literal defaultNULLNie ma wartości do skopiowania.default_keyword_null
REPLACE and INSERT IGNOREzwykłe wierszeZrzut ma jeden wiersz na klucz, więc wiersze są te same.replace_as_insert
types IntoSQL doesn't knowLONGBLOBBlob mieści bajty dowolnej wartości; zmień typ po załadowaniu.unknown_type
values that don't fit their columnNULLUszkodzony lub ręcznie pisany zrzut może zawierać wartości, których kolumna nie przyjmie; stają się NULL, aby reszta się załadowała.invalid_value_null
unreadable geometriesNULLBajtów, które nie są geometrią, nie da się zapisać jako geometrii.bad_geometry
TIMESTAMPzachowane, ładowane w strefie czasowej podanej w zrzucieSkrypt ustawia tę samą strefę czasową co zrzut, więc każdy moment jest ten sam.
VECTOR(n) (MariaDB 11.7+)json z liczbami float jako tablicąMySQL 5.7 i 8.0 nie mają typu wektorowego; tablica JSON zachowuje każdą liczbę float w każdej wersji.type_replaced

Załaduj skrypt do MySQL

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

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

Klucze obce są tworzone tak, jak deklaruje je zrzut, z FOREIGN_KEY_CHECKS=0 podczas ładowania wierszy, więc wiersz wskazujący na brakujący wiersz nie zatrzymuje ładowania.

Przy dużym zrzucie uruchom klienta na tej samej maszynie co serwer i zwiększ max_allowed_packet, jeśli pojedynczy wiersz jest bardzo duży.

IntoSQL Pro ładuje plik prosto do MySQL z aplikacji na komputer lub wiersza poleceń, bez pisania skryptu.

Jak zrobić zrzut MariaDB 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 utf8mb3 traci, zanim zobaczy go konwerter.
  • --hex-blob zapisuje kolumny binarne i wartości VECTOR 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 MariaDB. Raport wymienia je z nazwy i nigdy nie pomija ich po cichu, więc możesz je przepisać dla MySQL.

Pytania o konwersję MariaDB do MySQL

Nie ma tu odpowiedzi? Napisz do nas przez stronę kontaktu, a odpowie człowiek. Strona kontaktu

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ń.

Z jakich wersji MariaDB może pochodzić zrzut?

Zrzuty z mariadb-dump i mysqldump z MariaDB od 10.3 do 12, z jednym INSERT na tabelę lub jednym na wiersz. Każdy testowy zrzut pochodzi z MariaDB 10.11, 11.4 i 11.8 i jest porównywany ze źródłem komórka po komórce.

Czy kolumny UUID, INET6, JSON i VECTOR są zachowywane?

UUID staje się char(36), INET4 i INET6 varchar, JSON json, a VECTOR tablicą json jego liczb float, bo MySQL 5.7 i 8.0 nie mają takich typów.

Czy wartości AUTO_INCREMENT i sekwencje są zachowywane?

AUTO_INCREMENT zostaje bez zmian i idzie dalej od miejsca, w którym zostawił go zrzut. MySQL nie ma sekwencji, więc one i wartości domyślne, które z nich pobierają, trafiają do raportu.

A procedury składowane i wyzwalacze?

Raport wymienia je z nazwy, ale nie są konwertowane, więc możesz sprawdzić każdy z nich w MySQL, zanim go odtworzysz.

Na jakich wersjach MySQL ładuje się skrypt?

MySQL 5.7 i nowsze. Każdy testowy zrzut ładuje się na 5.7 i 9 i zatrzymuje przy pierwszym błędzie, jeśli coś pójdzie nie tak.