Przenieś zrzut MySQL do starszej lub nowszej wersji MySQL
Upuść zrzut z mysqldump, mysqlpump, phpMyAdmin lub Adminer, z MySQL od 5.5 do 9, jako .sql lub .sql.gz, i pobierz skrypt, który ładuje się na MySQL 5.7 i nowszych. Collation znane tylko MySQL 8 i nowszym, takie jak utf8mb4_0900_ai_ci, stają się utf8mb4_unicode_520_ci, a każda zmiana jest wymieniona w raporcie.
18 wierszy przekonwertowanych, 2 poprawki, brak odrzuconych
Tabele w pliku shop_2024.sqlZrzut MySQL 8.0.46 · zapisany przez mysqldump · utf8mb4
customers8 wierszy1
7 kolumn id int unsigned not null name varchar(100) not null email varchar(150) not null country char(2) not null is_active tinyint(1) not null signed_up date not null created_at timestamp not null orders10 wierszy1
9 kolumn id int unsigned not null customer_id int unsigned not null status enum('pending','paid','shipped','cancelled') not null total decimal(10,2) not null items smallint unsigned not null ordered_at datetime not null shipped_at datetime note varchar(255) updated_at timestamp 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 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,
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 unsigned NOT NULL AUTO_INCREMENT,
`customer_id` int unsigned NOT NULL,
`status` enum('pending','paid','shipped','cancelled') NOT NULL DEFAULT 'pending',
`total` decimal(10,2) NOT NULL,
`items` smallint unsigned NOT NULL DEFAULT 1,
`ordered_at` datetime NOT NULL,
`shipped_at` datetime DEFAULT NULL,
`note` varchar(255) 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`) VALUES (1,'Ana Martínez','ana@example.com','MX',1,'2023-01-15','2023-01-15 10:24:00'),(2,'Zoë Müller','zoe@example.de','DE',1,'2023-02-03','2023-02-03 08:11:42'),(3,'José Peña','jose@example.es','ES',0,'2023-03-21','2023-03-21 19:05:17'),(4,'李雷','lilei@example.cn','CN',1,'2023-05-09','2023-05-09 02:40:00'),(5,'Noah O\'Brien','noah@example.ie','IE',1,'0000-00-00','2023-06-30 14:00:00'),(6,'Amélie Laurent','amelie@example.fr','FR',1,'2024-01-02','2024-01-02 09:30:00'),(7,'Ravi Patel','ravi@example.in','IN',0,'2024-02-29','2024-02-29 23:59:59'),(8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'2024-04-12','2024-04-12 12:12:12');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`updated_at`) VALUES (1,1,'shipped',129.90,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL,'2024-03-02 16:30:00'),(2,2,'paid',54.00,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁','2024-03-02 11:20:00'),(3,1,'cancelled',12.50,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind','2024-03-03 10:00:00'),(4,4,'shipped',980.00,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放','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','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\"','2024-03-11 09:00:00'),(7,8,'paid',76.20,2,'2024-03-11 18:45:00',NULL,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','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','2024-03-15 10:00:00'),(10,7,'paid',1499.00,1,'2024-03-15 21:05:00',NULL,'C:\\Users\\ravi\\invoice.pdf','2024-03-15 21:05:00');
SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;
Poprawki
- customers używa porównywania utf8mb4_0900_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.
- orders używa porównywania utf8mb4_0900_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.
Plik jest konwertowany na tym komputerze i nigdy nie jest wysyłany.
Inne przykłady:
Co się zmienia między plikiem a skryptem
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 pliku | W skrypcie | Wpis w raporcie |
|---|---|---|
| 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. | 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. | |
| TIME | TIME, łącznie z czasami trwaniaTen sam typ, z tym samym zakresem. | |
| TINYINT(1), BOOL | TINYINT(1)Ten sam typ z tymi samymi wartościami. | |
| UNSIGNED and ZEROFILL | zachowaneTe same typy. | |
| ENUM and SET, the '' error value included | zachowaneTe same typy; skrypt ładuje się bez trybu ścisłego, więc wartość błędu ładuje się bez zmian. | |
| JSON | JSONMySQL odczytuje ten sam tekst JSON. | |
| NUL bytes in text | zachowaneWartość jest kopiowana z tą samą sekwencją ucieczki, której użyło źródło. | |
| AUTO_INCREMENT | AUTO_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 dump | indeks 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_TIMESTAMP | zachowaneTa sama klauzula, z ułamkami sekund kolumny. | |
| generated columns | VIRTUAL lub STORED jak w źródleTa sama formuła, przetłumaczona element po elemencie. | |
| generated columns with functions IntoSQL doesn't read | zwykła kolumnaFormuła, której IntoSQL nie potrafi odczytać, zostawia zwykłą kolumnę i wpis w raporcie. | generated_not_translated |
| INVISIBLE columns | zwykłe kolumnyMySQL ma niewidoczne kolumny od 8.0.23, MariaDB od 10.3. | 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 tworzoneCHECK, którego IntoSQL nie odczyta, jest pomijany i zgłaszany. | check_skipped |
| CHECK ... NOT ENFORCED | nie 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 GEOMETRY | brak 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 indexes | zachowaneTen sam indeks; MATCH ... AGAINST działa jak wcześniej. | |
| SPATIAL indexes | zachowaneTen sam indeks. | |
| foreign keys | zachowane, ł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, BLOB | zachowaneBajty pozostają bajtami. | |
| PARTITION BY | jedna 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 events | wymienione 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 NULL | NOT 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 set | błę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 TABLE | typy 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 TABLE | GEOMETRYFormat geometrii MySQL jest rozpoznawany po wartościach. | |
| SET NAMES utf8 from utf8mb4 tables | przekonwertowane, 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-8 | odczytane jako Latin-1 (Windows-1252)latin1 w MySQL to Windows-1252, zwykłe kodowanie takich zrzutów. | charset_guessed |
| sjis, cp932, gbk, big5 dumps | odczytane jako UTF-8, z ostrzeżeniemTe kodowania nie są jeszcze dekodowane. | unsupported_charset |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | obliczoneNiektó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 | NULLKonwerter, który nie uruchamia bazy danych, nie może ich obliczyć. | expression_value |
| DEFAULT in VALUES | wartość domyślna kolumnyDosłowna wartość domyślna jest kopiowana do wiersza. | default_keyword_filled |
| DEFAULT in VALUES without a literal default | NULLNie ma wartości do skopiowania. | default_keyword_null |
| REPLACE and INSERT IGNORE | zwykłe wierszeZrzut ma jeden wiersz na klucz, więc wiersze są te same. | replace_as_insert |
| types IntoSQL doesn't know | LONGBLOBBlob mieści bajty dowolnej wartości; zmień typ po załadowaniu. | unknown_type |
| values that don't fit their column | NULLUszkodzony 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 geometries | NULLBajtów, które nie są geometrią, nie da się zapisać jako geometrii. | bad_geometry |
| TIMESTAMP | zachowane, ł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 < mysql.mysql.sqlKlucze 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 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, funkcje i inne obiekty napisane we własnym języku MySQL są wymienione w raporcie z nazwy i nigdy nie są pomijane po cichu, więc możesz sprawdzić każdy z nich w wersji MySQL, do której ładujesz, zanim go odtworzysz.
Pytania o przenoszenie MySQL między wersjami
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ń.
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?
MySQL je zachowuje: skrypt na czas ładowania ustawia tryb SQL, który akceptuje daty zerowe i niemożliwe, więc trafiają bez zmian.
Czy wartości AUTO_INCREMENT są zachowywane?
Tak. AUTO_INCREMENT zostaje bez zmian, a licznik tabeli kontynuuje od miejsca, w którym zostawił go zrzut.
Czy TINYINT(1) staje się boolean?
Zostaje TINYINT(1), jak w źródle, więc każda wartość zachowuje swoją liczbę.
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 wersji MySQL, do której ładujesz, zanim go odtworzysz. ON UPDATE CURRENT_TIMESTAMP zostaje bez zmian.
Na jakich wersjach MySQL ładuje się skrypt?
MySQL 5.7 i nowsze. Każdy testowy zrzut ładuje się na 5.7 i 9, zatrzymując się na pierwszym błędzie, jeśli coś pójdzie nie tak.