---
title: "Migrasi MySQL ke SQLite di browser Anda"
description: "Migrasi database MySQL atau MariaDB ke SQLite: konversi dump-nya menjadi skrip dengan tabel, kunci, dan data yang sama, plus laporan setiap perubahan."
canonical: https://intosql.com/id/mysql-ke-sqlite
last_updated: 2026-10-15
---

# Migrasi MySQL ke SQLite di browser Anda

Letakkan dump dari mysqldump, mariadb-dump, mysqlpump, phpMyAdmin, atau Adminer, sebagai .sql atau .sql.gz, lalu unduh skrip SQLite dengan tabel, kunci, indeks, dan data yang sama. Setiap nilai yang tidak bisa disimpan SQLite apa adanya, dan setiap objek yang tidak didukungnya, dicantumkan di laporan.

[Panduan migrasi MySQL ke SQLite](https://intosql.com/docs/migrations/mysql-to-sqlite)

[Tipe data MySQL ke SQLite](https://intosql.com/docs/types/mysql-to-sqlite)

## Yang berubah dari MySQL ke SQLite

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

| Di MySQL | Di SQLite | Baris laporan |
| --- | --- | --- |
| TINYINT(1), BOOL | INTEGER dengan nilai apa adanya |  |
| UNSIGNED integers | INTEGER dengan CHECK bahwa nilainya tidak negatif; BIGINT UNSIGNED dengan nilai di atas 2^63-1 menjadi TEXT | `unsigned_widened` |
| ZEROFILL and display widths | dihapus | `zerofill_dropped` |
| FLOAT(M,D) | REAL, tanpa skala | `float_scale_dropped` |
| DECIMAL(p,s) | DECIMAL(p,s) sampai 15 digit; TEXT jika lebih | `decimal_as_text` |
| BIT(1), BIT(n) | INTEGER dengan nilai bitnya; BIT(64) sebagai digit TEXT |  |
| 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 dihapus | `not_null_relaxed` |
| DEFAULT '0000-00-00' | tanpa default | `zero_date_default` |
| TIME | teks TIME seperti yang ditulis MySQL, termasuk durasi |  |
| YEAR | INTEGER dengan CHECK rentangnya |  |
| CHAR(n), VARCHAR(n) | VARCHAR(n), tidak diberlakukan |  |
| DATETIME | DATETIME sebagai teks ISO 8601 |  |
| TIMESTAMP | TIMESTAMP sebagai teks ISO 8601 dalam UTC; zona yang disebutkan dump, UTC jika tidak disebutkan | `timestamp_zone_assumed` |
| ENUM | TEXT dengan CHECK nilainya |  |
| ENUM holding '' (MySQL's error value) | nilai kosong yang diizinkan CHECK | `enum_invalid_value` |
| ENUM holding values outside its list | tanpa CHECK | `enum_check_skipped` |
| SET | TEXT seperti yang ditulis MySQL ('a,b') |  |
| JSON | TEXT |  |
| NUL bytes in text | dipertahankan |  |
| text that isn't valid in its character set | byte yang rusak menjadi karakter pengganti | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | disalin apa adanya | `mojibake_suspected` |
| AUTO_INCREMENT | INTEGER PRIMARY KEY AUTOINCREMENT, dengan penghitung diatur melewati id yang disalin |  |
| AUTO_INCREMENT on part of a key or outside one | INTEGER tanpa penghitung | `identity_without_counter` |
| ON UPDATE CURRENT_TIMESTAMP | trigger AFTER UPDATE | `on_update_trigger` |
| generated columns | GENERATED ALWAYS AS, VIRTUAL atau STORED seperti di sumber |  |
| generated columns with functions SQLite lacks | kolom biasa | `generated_not_translated` |
| INVISIBLE columns | kolom biasa | `invisible_column` |
| CHECK constraints | diterjemahkan, langsung di CREATE TABLE |  |
| CHECK constraints with functions SQLite lacks | tidak dibuat | `check_skipped` |
| CHECK ... NOT ENFORCED | tidak dibuat | `check_not_enforced` |
| defaults with functions SQLite lacks | tanpa default | `default_not_translated` |
| keys and indexes on a prefix, c(20) | indeks pada substr(c, 1, 20) | `prefix_unique` |
| FULLTEXT indexes | tidak dibuat | `fulltext_not_created` |
| SPATIAL indexes | tidak dibuat | `spatial_index_not_created` |
| functional indexes SQLite can't write | tidak dibuat | `index_skipped` |
| foreign keys | di CREATE TABLE, dimuat tanpa pemeriksaan, lalu dicantumkan oleh PRAGMA foreign_key_check |  |
| foreign keys to columns without a unique key | tidak dibuat | `foreign_key_skipped` |
| table, index and column names | seperti ditulis; diganti nama jika hanya berbeda huruf besar-kecil atau nama indeks berulang | `identifier_renamed` |
| GEOMETRY, POINT, POLYGON... | WKB dalam BLOB | `geometry_as_blob` |
| INET4, INET6, UUID (MariaDB) | TEXT |  |
| BINARY, VARBINARY, BLOB | BLOB |  |
| PARTITION BY | satu tabel | `partitions_dropped` |
| WITH SYSTEM VERSIONING (MariaDB) | tabel dengan baris saat ini | `system_versioning_dropped` |
| MyISAM, MEMORY and other engines | tabel biasa | `engine_dropped` |
| dumps of several databases | satu file, setiap tabel diberi nama database-nya di depan | `databases_merged` |
| views, triggers, procedures, functions and events | dicantumkan di laporan | `not_converted_objects` |
| dumps without CREATE TABLE | tipe dibaca dari nilai | `no_schema` |
| geometries in a dump without CREATE TABLE | WKB dalam BLOB | `geometry_as_blob` |
| _ci collations | perbandingan persis | `case_insensitive_collation` |
| SET NAMES utf8 from utf8mb4 tables | dikonversi, dengan peringatan | `dump_lost_four_byte_chars` |
| dumps without SET NAMES whose text isn't UTF-8 | dibaca sebagai Latin-1 (Windows-1252) | `charset_guessed` |
| sjis, cp932, gbk, big5 dumps | dibaca sebagai UTF-8, dengan peringatan | `unsupported_charset` |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | dievaluasi |  |
| other expressions in rows | NULL | `expression_value` |
| DEFAULT in VALUES | nilai default kolom | `default_keyword_filled` |
| DEFAULT in VALUES without a literal default | NULL | `default_keyword_null` |
| REPLACE and INSERT IGNORE | baris biasa | `replace_as_insert` |
| types IntoSQL doesn't know | TEXT | `unknown_type` |
| values that don't fit their column | NULL | `invalid_value_null` |
| unreadable geometries | NULL | `bad_geometry` |
| CREATE SEQUENCE (MariaDB) | tidak dibuat | `sequence_not_converted` |
| VECTOR(n) (MariaDB 11.7+) | TEXT dengan float sebagai array JSON | `type_replaced` |

## Muat skrip ke SQLite

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

```shell
sqlite3 -bail mydb.sqlite < mysql.sqlite.sql
```

Foreign key dideklarasikan di setiap tabel dan baris dimuat dengan pemeriksaan foreign key nonaktif. Lalu skrip mencantumkan setiap baris yang merujuk ke baris yang tidak ada, bukan gagal di tengah jalan.

Untuk dump yang besar, muat ke file baru di disk lokal. Skrip memuat semuanya dalam satu transaksi dengan sinkronisasi nonaktif, jadi berjalan secepat disk, dan pemuatan yang berhenti di tengah jalan tidak meninggalkan tabel setengah jadi.

Command line memuat file langsung ke database SQLite, tanpa menulis skrip. Gratis.

## Buat dump MySQL untuk hasil terbaik

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

- --default-character-set=utf8mb4 mempertahankan emoji dan karakter 4 byte lainnya, yang hilang di dump utf8 sebelum konverter melihatnya.
- --hex-blob menulis kolom biner sebagai heksadesimal, yang tetap utuh saat disalin antarsistem.
- --routines --triggers --events menambahkan objek-objek itu ke dump, sehingga laporan bisa mencantumkannya.

## Yang tidak dikonversi

View, trigger, stored procedure, fungsi, dan event ditulis dalam bahasa masing-masing database. Semuanya dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, sehingga Anda bisa menulis ulang untuk SQLite.

## Pertanyaan tentang MySQL ke SQLite

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

### Apakah dump MariaDB bisa dibaca?

Ya. Dump dari mariadb-dump dan dari MariaDB 10.3 sampai 12 dikonversi dengan cara yang sama, termasuk kolom INET6, INET4, dan UUID milik MariaDB.

### Apa yang terjadi pada tanggal 0000-00-00?

Tanggal itu menjadi NULL: SQLite akan menyimpan teksnya, tetapi tidak ada yang membaca 0000-00-00 sebagai tanggal. Laporan menyebutkan jumlahnya di setiap kolom.

### Apakah nilai AUTO_INCREMENT dipertahankan?

Ya. Kolom AUTO_INCREMENT yang menjadi seluruh primary key tabel menjadi INTEGER PRIMARY KEY AUTOINCREMENT, setiap baris mempertahankan id-nya, dan id berikutnya berlanjut setelah id tertinggi. Kolom AUTO_INCREMENT lainnya mempertahankan nilainya tanpa penghitung, dan laporan menyebutkannya.

### Apakah TINYINT(1) menjadi boolean?

Tidak. SQLite tidak punya tipe boolean, jadi TINYINT(1) menjadi INTEGER dan setiap nilai tetap apa adanya.

### Bagaimana dengan stored procedure dan trigger?

Semuanya dicantumkan di laporan berdasarkan nama dan tidak dikonversi, karena setiap database menulisnya dalam bahasanya sendiri. ON UPDATE CURRENT_TIMESTAMP adalah pengecualian: menjadi trigger SQLite.

### Di versi SQLite mana skrip bisa dimuat?

SQLite 3.31 dan yang lebih baru. Setiap dump uji dimuat di 3.31 dan 3.54, dan berhenti di galat pertama jika ada yang salah.

## Dari MySQL

- [MySQL ke PostgreSQL](https://intosql.com/id/mysql-ke-postgresql)
- [MySQL ke MySQL](https://intosql.com/id/mysql-ke-mysql)
- [MySQL ke MariaDB](https://intosql.com/id/mysql-ke-mariadb)
- [MySQL ke SQL Server](https://intosql.com/id/mysql-ke-sql-server)
- [MySQL ke Oracle](https://intosql.com/id/mysql-ke-oracle)

## Ke SQLite

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

## Panduan dan setiap pasangan

- [SQLite ke MySQL](https://intosql.com/id/sqlite-ke-mysql)
- [Panduan migrasi MySQL ke SQLite](https://intosql.com/docs/migrations/mysql-to-sqlite)
- [Tipe data MySQL ke SQLite](https://intosql.com/docs/types/mysql-to-sqlite)
- [Setiap pasangan database](https://intosql.com/id/migrasi-database)
