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

# Migrasi MySQL ke SQL Server di browser Anda

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

[Panduan migrasi MySQL ke SQL Server](https://intosql.com/docs/migrations/mysql-to-sql-server)

[Tipe data MySQL ke SQL Server](https://intosql.com/docs/types/mysql-to-sql-server)

## Yang berubah dari MySQL ke SQL Server

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

| Di MySQL | Di SQL Server | Baris laporan |
| --- | --- | --- |
| TINYINT(1), BOOL | bit jika setiap nilai 0 atau 1, selain itu smallint | `bool_kept_numeric` |
| UNSIGNED integers | TINYINT UNSIGNED menjadi tinyint; lainnya bilangan bulat yang lebih lebar dengan CHECK bahwa nilainya tidak negatif, BIGINT UNSIGNED menjadi bigint jika semua nilai muat, selain itu decimal(38,0) | `unsigned_widened` |
| ZEROFILL and display widths | dihapus | `zerofill_dropped` |
| FLOAT(M,D) | real atau float, tanpa skala | `float_scale_dropped` |
| DECIMAL(p,s) | decimal(p,s) sampai 38 digit; nvarchar jika lebih | `decimal_as_text` |
| BIT(1), BIT(n) | bit; bigint sampai 63 bit; decimal(20,0) untuk 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 dihapus | `not_null_relaxed` |
| DEFAULT '0000-00-00' | tanpa default | `zero_date_default` |
| TIME | time jika setiap nilai dalam sehari, selain itu nvarchar | `time_as_interval` |
| YEAR | smallint dengan CHECK rentangnya |  |
| CHAR(n), VARCHAR(n) | nvarchar(n) |  |
| text with characters past U+FFFF (emoji) in VARCHAR(n) | nvarchar(2n), atau nvarchar(max) jika lebih dari 4000 | `text_length_widened` |
| DATETIME | datetime2 |  |
| TIMESTAMP | datetimeoffset dalam zona waktu yang disebutkan dump, UTC jika tidak disebutkan | `timestamp_zone_assumed` |
| ENUM | nvarchar 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 | nvarchar seperti yang ditulis MySQL ('a,b') |  |
| JSON | nvarchar(max) |  |
| 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 | IDENTITY, dengan penghitung diatur melewati id yang disalin |  |
| MyISAM AUTO_INCREMENT on the second column of a key | satu penghitung untuk tabel | `myisam_group_autoincrement` |
| ON UPDATE CURRENT_TIMESTAMP | trigger AFTER UPDATE | `on_update_trigger` |
| ON UPDATE CURRENT_TIMESTAMP on a table without a primary key | tidak dibawa | `on_update_without_key` |
| generated columns | kolom computed, PERSISTED jika sumber menyimpannya |  |
| generated columns with functions SQL Server lacks | kolom biasa | `generated_not_translated` |
| INVISIBLE columns | kolom biasa | `invisible_column` |
| CHECK constraints | diterjemahkan, langsung di CREATE TABLE |  |
| CHECK constraints with functions SQL Server lacks | tidak dibuat | `check_skipped` |
| CHECK ... NOT ENFORCED | tidak dibuat | `check_not_enforced` |
| defaults with functions SQL Server lacks | tanpa default | `default_not_translated` |
| keys and indexes on a prefix, c(20) | indeks pada seluruh kolom | `prefix_whole_column` |
| FULLTEXT indexes | tidak dibuat | `fulltext_not_created` |
| SPATIAL indexes | tidak dibuat | `spatial_index_not_created` |
| functional indexes, and indexes on columns of unlimited length | tidak dibuat | `index_skipped` |
| foreign keys | setelah data WITH NOCHECK, lalu diperiksa dengan peringatan untuk baris yatim |  |
| ON DELETE or ON UPDATE that cascades in a cycle or along a second path | NO ACTION | `foreign_key_action_dropped` |
| foreign keys to columns without a unique key | tidak dibuat | `foreign_key_skipped` |
| table and column names | seperti ditulis; diganti nama jika hanya berbeda huruf besar-kecil | `identifier_renamed` |
| names over 116 characters | dipersingkat | `name_shortened` |
| GEOMETRY, POINT, POLYGON... | geometry, dengan SRID setiap nilai |  |
| INET4, INET6, UUID (MariaDB) | nvarchar(39), uniqueidentifier |  |
| BINARY, VARBINARY, BLOB | binary, varbinary, varbinary(max) |  |
| 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` |
| 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 | geometry |  |
| _ci collations | collation database, biasanya tidak membedakan huruf besar-kecil |  |
| 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 | nvarchar(max) | `unknown_type` |
| values that don't fit their column | NULL | `invalid_value_null` |
| unreadable geometries | NULL | `bad_geometry` |
| CREATE SEQUENCE (MariaDB) | CREATE SEQUENCE ... AS bigint, dengan nilai berikutnya |  |
| VECTOR(n) (MariaDB 11.7+) | nvarchar(max) dengan float sebagai array JSON | `type_replaced` |

## Muat skrip ke SQL Server

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

```shell
sqlcmd -b -f 65001 -S localhost -d mydb -i mysql.sql_server.sql
```

Foreign key ditambahkan WITH NOCHECK lalu diperiksa. Jika sebuah baris merujuk ke baris yang tidak ada, skrip menyebutkan constraint mana dan membiarkannya tidak diperiksa, bukan gagal di tengah jalan.

Untuk dump yang besar, jalankan sqlcmd di mesin yang sama dengan server. Setiap batch berisi maksimal 1000 baris di-commit sendiri, jadi log transaksi tetap kecil.

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

## Pertanyaan tentang MySQL ke SQL Server

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

SQL Server tidak punya tanggal nol, jadi tanggal itu menjadi NULL dan kolomnya menerima NULL. Laporan menyebutkan jumlahnya di setiap kolom.

### Apakah nilai AUTO_INCREMENT dipertahankan?

Ya. Setiap kolom AUTO_INCREMENT menjadi kolom IDENTITY, setiap baris mempertahankan id-nya, dan id berikutnya berlanjut setelah id tertinggi, atau setelah AUTO_INCREMENT tabel jika itu lebih tinggi.

### Apakah TINYINT(1) menjadi boolean?

Menjadi bit hanya jika setiap nilai di kolom itu 0 atau 1. Jika berisi angka lain, seperti 2 atau -1, kolom tetap berupa angka dan laporan menjelaskan alasannya, jadi tidak ada nilai yang tanpa sengaja menjadi 1.

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

### Di versi SQL Server mana skrip bisa dimuat?

SQL Server 2017 sampai 2025. Skrip yang sama dimuat di setiap versi itu, 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 SQLite](https://intosql.com/id/mysql-ke-sqlite)
- [MySQL ke Oracle](https://intosql.com/id/mysql-ke-oracle)

## Ke SQL Server

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

## Panduan dan setiap pasangan

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