Langsung ke konten
Beranda IntoSQL

Konversi SQL Server ke MySQL

Letakkan skrip yang ditulis Generate Scripts di SSMS dengan schema dan data, sebagai .sql atau .sql.gz, UTF-16 atau UTF-8, 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_sqlserver.sqlFile contoh, 11 kB
Database Anda

18 baris dikonversi, 3 perbaikan, tidak ada yang ditolak

Tampilkan

Tabel di shop_2024_sqlserver.sqlDump SQL Server · ditulis oleh SQL Server Management Objects · utf-8

  • orders10 baris1
    11 kolom
    idint not null
    customer_idint not null
    statusvarchar(10) not null
    totaldecimal(19,4) not null
    itemstinyint unsigned not null
    ordered_atdatetime not null
    shipped_atdatetime(6)
    notetext
    detailstext
    order_refchar(36) not null
    total_with_taxdecimal(12,2)
  • customers8 baris2
    8 kolom
    idint not null
    namevarchar(100) not null
    emailvarchar(200) not null
    countrychar(2) not null
    is_activetinyint(1) not null
    signed_update
    created_atdatetime not null
    row_versionblob

Tidak dikonversi

  • View paid_orders
  • Trigger orders_no_negative

Setiap database menulis objek ini dalam bahasanya sendiri. Tulis ulang untuk MySQL.

-- Written by IntoSQL from a SQL Server 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 `orders` (
  `id` int NOT NULL AUTO_INCREMENT,
  `customer_id` int NOT NULL,
  `status` varchar(10) NOT NULL DEFAULT 'pending',
  `total` decimal(19,4) NOT NULL,
  `items` tinyint unsigned NOT NULL DEFAULT 1,
  `ordered_at` datetime NOT NULL,
  `shipped_at` datetime(6),
  `note` text,
  `details` text,
  `order_ref` char(36) NOT NULL,
  `total_with_tax` decimal(12,2) GENERATED ALWAYS AS (cast(`total` * (1.16) AS DECIMAL(12,2))) STORED,
  PRIMARY KEY (`id`),
  KEY `idx_orders_customer` (`customer_id`),
  KEY `idx_orders_status_date` (`status`,`ordered_at`),
  CONSTRAINT `check2` CHECK (`status` = 'cancelled' OR `status` = 'shipped' OR `status` = 'paid' OR `status` = 'pending'),
  CONSTRAINT `check3` CHECK (`total` >= (0)),
  FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`)
) AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

CREATE TABLE `customers` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `email` varchar(200) NOT NULL,
  `country` char(2) NOT NULL DEFAULT 'US',
  `is_active` tinyint(1) NOT NULL DEFAULT 1,
  `signed_up` date,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `row_version` blob,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`email`)
) AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='People who bought at least once';

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.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','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','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','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','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','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','2024-04-12 12:12:12.000000');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (1,1,'shipped',129.9000,3,'2024-03-01T10:00:00.000000','2024-03-02T16:30:00.123456',NULL,'{"gift": false}','0b7a4c2e-3f1d-4e8a-9c55-1a2b3c4d5e6f');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (2,2,'paid',54.0000,1,'2024-03-02T11:15:00.000000',NULL,'Gift wrap 🎁','{"gift": true, "wrap": "red"}','1c8b5d3f-4a2e-4f9b-8d66-2b3c4d5e6f70');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (3,1,'cancelled',12.5000,1,'2024-03-03T09:45:00.000000',NULL,'Customer changed their mind',NULL,'2d9c6e4a-5b3f-4a0c-9e77-3c4d5e6f7081');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (4,4,'shipped',980.0000,12,'2024-03-05T02:10:00.000000','2024-03-07T08:00:00.000000','请小心轻放','{"fragile": true}','3e0d7f5b-6c4a-4b1d-8f88-4d5e6f708192');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (5,5,'pending',45.7500,2,'2024-03-08T17:20:00.000000',NULL,'Leave at the door; ring twice',NULL,'4f1e806c-7d5b-4c2e-9a99-5e6f708192a3');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (6,6,'shipped',310.4000,5,'2024-03-10T13:00:00.000000','2024-03-11T09:00:00.000000','Fragile: "glass"','{"fragile": true}','50f2917d-8e6c-4d3f-8baa-6f708192a3b4');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (7,8,'paid',76.2000,2,'2024-03-11T18:45:00.000000',NULL,NULL,NULL,'6103a28e-9f7d-4e40-9cbb-708192a3b4c5');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (8,2,'shipped',19.9900,1,'2024-03-12T08:00:00.000000','9999-12-31T23:59:59.999999','Shipped date set to the maximum by an old import',NULL,'7214b39f-a08e-4f51-8dcc-8192a3b4c5d6');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (9,3,'shipped',64.0000,2,'2024-03-14T15:30:00.000000','2024-03-15T10:00:00.000000','Two parcels','{"parcels": [1, 2]}','8325c4a0-b19f-4062-9edd-92a3b4c5d6e7');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (10,7,'paid',1499.0000,1,'2024-03-15T21:05:00.000000',NULL,'C:\\Users\\ravi\\invoice.pdf',NULL,'9436d5b1-c2a0-4173-8fee-a3b4c5d6e7f8');

SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;

Perbaikan

  1. "shipped_at" dari orders adalah datetime2(7), dengan digit detik lebih banyak daripada yang disimpan MySQL, jadi menjadi datetime(6) dan digit terakhirnya dipotong.
  2. "created_at" dari customers berisi momen dengan zona waktu; MySQL tidak punya tipe yang menyimpannya, jadi momen itu disimpan dalam UTC sebagai datetime.
  3. "row_version" dari customers adalah versi baris yang diatur SQL Server sendiri; dump tidak berisi nilainya, jadi menjadi blob dan kosong.

Perlu diperiksa

  • 6 kolom teks di sumber membandingkan tanpa membedakan huruf besar dan kecil; MySQL membandingkan secara persis, jadi kunci unik dan pencarian bisa berperilaku berbeda. Gunakan collation atau tipe kolom yang tidak membedakan huruf besar dan kecil pada kolom yang membutuhkannya.
  • 2 view, trigger, rutin, atau event tidak dikonversi; laporan mencantumkan masing-masing. Buat ulang secara manual di MySQL.
  • CHECK check1 pada orders tidak bisa ditulis untuk MySQL (function isjson), jadi tidak dibuat. Tulis CHECK secara manual jika penting.
  • Indeks idx_orders_pending pada orders memakai ekspresi yang tidak bisa ditulis untuk MySQL (neither MySQL 5.7 nor MariaDB index an expression), jadi tidak dibuat. Buat indeks secara manual jika kueri memerlukannya.
  • Default "order_ref" di orders tidak bisa ditulis untuk MySQL (a default expression needs MySQL 8.0.13), 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 SQL Server ke MySQL

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

  • bit

    tinyint(1)

    BOOLEAN di MySQL adalah TINYINT(1): 1 dan 0, seperti yang disimpan bit.

  • char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text

    char(n), varchar(n) sampai 1024 karakter, tipe text jika lebih

    Teks mempertahankan setiap karakter sebagai utf8mb4. Kolom dalam key paling banyak varchar(768), batas terpanjang key, begitu juga teks yang punya default, karena MySQL 5.7 hanya memberi default pada varchar.

  • decimal(p,s), money, smallmoney

    decimal(p,s); money sebagai decimal(19,4)

    decimal memuat 65 digit, lebih dari 38 digit SQL Server, jadi setiap nilai tetap tepat.

  • datetime, datetime2, smalldatetime

    datetime(p)

    datetime adalah pembacaan jam dinding di keduanya.

  • datetime2(7), time(7) and datetimeoffset(7)

    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

  • datetimeoffset

    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

  • time

    time(p)

    Jam dalam sehari yang sama.

  • dates before the year 1000

    NULL

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

    Baris laporan: date_out_of_range

  • json (SQL Server 2025)

    json

    Nilai JSON yang sama, yang dibaca fungsi JSON di MySQL.

  • uniqueidentifier

    char(36)

    Identifier yang sama, ditulis dengan huruf kecil.

  • binary, varbinary, image

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

    Byte tetap byte.

  • geometry, geography

    blob dengan byte milik SQL Server

    SSMS menulis nilai spasial dalam serialisasi milik SQL Server, yang dipertahankan byte demi byte.

    Baris laporan: spatial_as_native

  • rowversion, timestamp

    blob, kosong

    SQL Server mengatur versi baris sendiri dan SSMS tidak menulis nilainya.

    Baris laporan: rowversion_empty

  • xml, sql_variant, hierarchyid, vector

    longtext

    MySQL tidak punya tipe yang setara; xml dan sql_variant mempertahankan teks setiap nilai dan hierarchyid jalurnya, misalnya /1/2/.

    Baris laporan: type_replaced

  • collations that ignore case (_CI_)

    perbandingan persis (utf8mb4_bin)

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

    Baris laporan: case_insensitive_collation

  • IDENTITY

    AUTO_INCREMENT, berlanjut setelah id tertinggi

    Kolom yang mengawali primary key dihitung; penghitung berlanjut setelah id tertinggi.

  • IDENTITY columns that don't lead the primary key

    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

    MySQL tidak punya sequence. Nilai yang diberikan sequence ada di baris.

    Baris laporan: sequence_not_converted

  • computed columns

    kolom generated, STORED jika PERSISTED, selain itu VIRTUAL

    MySQL menghitungnya dengan dua cara yang sama, dengan CONCAT ditulis agar NULL dihitung sebagai kosong seperti di SQL Server.

  • computed columns with functions MySQL lacks

    kolom biasa

    Rumus yang tidak bisa ditulis menyisakan kolom biasa dan satu baris laporan; SSMS tidak menulis nilai untuk kolom terhitung.

    Baris laporan: generated_not_translated

  • defaults with functions MySQL lacks, and NEXT VALUE FOR

    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 MySQL lacks

    tidak dibuat

    CHECK yang tidak bisa ditulis dihilangkan dan dilaporkan.

    Baris laporan: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    tidak dibuat

    SQL Server tidak menerapkan CHECK ini, jadi baris bisa melanggarnya.

    Baris laporan: check_not_enforced

  • filtered and columnstore 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 dump doesn't create

    tidak dibuat

    Key tidak bisa merujuk ke tabel yang tidak ada.

    Baris laporan: foreign_key_skipped

  • tables on a partition scheme

    satu tabel dengan baris dari setiap partisi

    Barisnya sama; partisi ulang tabel di MySQL jika diperlukan.

    Baris laporan: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    dua tabel: baris saat ini dan riwayatnya

    Tabel dan tabel riwayatnya disalin sebagai tabel biasa; MySQL tidak menyimpan riwayat sendiri.

    Baris laporan: system_versioning_dropped

  • schemas

    satu database, nama tabel diawali nama skemanya

    Schema di MySQL adalah database, yang tidak bisa dibuat oleh skrip yang dimuat ke satu database; tabel di dbo mempertahankan namanya.

    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, functions, procedures, triggers, synonyms, types and partition functions

    dicantumkan di laporan

    Kodenya ditulis dalam T-SQL, jadi dicantumkan agar Anda bisa membuatnya ulang.

    Baris laporan: not_converted_objects

  • scripts without CREATE TABLE (data only)

    tipe dibaca dari nilai

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

    Baris laporan: no_schema

  • expressions in INSERT values

    NULL

    Konverter yang tidak menjalankan database tidak bisa mengevaluasinya.

    Baris laporan: expression_value

  • types IntoSQL doesn't know

    longtext

    Text memuat nilai apa pun; ubah tipenya setelah pemuatan.

    Baris laporan: unknown_type

  • 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 SQL ServerDi MySQLBaris laporan
bittinyint(1)BOOLEAN di MySQL adalah TINYINT(1): 1 dan 0, seperti yang disimpan bit.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), textchar(n), varchar(n) sampai 1024 karakter, tipe text jika lebihTeks mempertahankan setiap karakter sebagai utf8mb4. Kolom dalam key paling banyak varchar(768), batas terpanjang key, begitu juga teks yang punya default, karena MySQL 5.7 hanya memberi default pada varchar.
decimal(p,s), money, smallmoneydecimal(p,s); money sebagai decimal(19,4)decimal memuat 65 digit, lebih dari 38 digit SQL Server, jadi setiap nilai tetap tepat.
datetime, datetime2, smalldatetimedatetime(p)datetime adalah pembacaan jam dinding di keduanya.
datetime2(7), time(7) and datetimeoffset(7)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
datetimeoffsetdatetime(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
timetime(p)Jam dalam sehari yang sama.
dates before the year 1000NULLMySQL menyimpan tahun 1000 sampai 9999, sedangkan SQL Server mundur sampai tahun 1. Nilai itu menjadi NULL dan laporan menghitungnya.date_out_of_range
json (SQL Server 2025)jsonNilai JSON yang sama, yang dibaca fungsi JSON di MySQL.
uniqueidentifierchar(36)Identifier yang sama, ditulis dengan huruf kecil.
binary, varbinary, imagebinary(n), varbinary(n), dan tipe blobByte tetap byte.
geometry, geographyblob dengan byte milik SQL ServerSSMS menulis nilai spasial dalam serialisasi milik SQL Server, yang dipertahankan byte demi byte.spatial_as_native
rowversion, timestampblob, kosongSQL Server mengatur versi baris sendiri dan SSMS tidak menulis nilainya.rowversion_empty
xml, sql_variant, hierarchyid, vectorlongtextMySQL tidak punya tipe yang setara; xml dan sql_variant mempertahankan teks setiap nilai dan hierarchyid jalurnya, misalnya /1/2/.type_replaced
collations that ignore case (_CI_)perbandingan persis (utf8mb4_bin)Tabel memakai utf8mb4_bin agar unique key membedakan apa yang dibedakan SQL Server; kolom yang mengabaikan huruf besar dan kecil kehilangan sifat itu. Aturan aksen berbeda antarversi, jadi tidak ada collation _ci yang cocok dengan milik SQL Server di semua versi.case_insensitive_collation
IDENTITYAUTO_INCREMENT, berlanjut setelah id tertinggiKolom yang mengawali primary key dihitung; penghitung berlanjut setelah id tertinggi.
IDENTITY columns that don't lead the primary keybilangan bulat biasaMySQL menghitung satu kolom per tabel, di awal sebuah key; kolom lain mempertahankan nilainya tanpa penghitung.counter_dropped
CREATE SEQUENCEtidak dibuatMySQL tidak punya sequence. Nilai yang diberikan sequence ada di baris.sequence_not_converted
computed columnskolom generated, STORED jika PERSISTED, selain itu VIRTUALMySQL menghitungnya dengan dua cara yang sama, dengan CONCAT ditulis agar NULL dihitung sebagai kosong seperti di SQL Server.
computed columns with functions MySQL lackskolom biasaRumus yang tidak bisa ditulis menyisakan kolom biasa dan satu baris laporan; SSMS tidak menulis nilai untuk kolom terhitung.generated_not_translated
defaults with functions MySQL lacks, and NEXT VALUE FORtanpa 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 MySQL lackstidak dibuatCHECK yang tidak bisa ditulis dihilangkan dan dilaporkan.check_skipped
CHECK constraints added WITH NOCHECK or disabledtidak dibuatSQL Server tidak menerapkan CHECK ini, jadi baris bisa melanggarnya.check_not_enforced
filtered and columnstore 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 dump doesn't createtidak dibuatKey tidak bisa merujuk ke tabel yang tidak ada.foreign_key_skipped
tables on a partition schemesatu tabel dengan baris dari setiap partisiBarisnya sama; partisi ulang tabel di MySQL jika diperlukan.partitions_dropped
temporal tables (SYSTEM_VERSIONING)dua tabel: baris saat ini dan riwayatnyaTabel dan tabel riwayatnya disalin sebagai tabel biasa; MySQL tidak menyimpan riwayat sendiri.system_versioning_dropped
schemassatu database, nama tabel diawali nama skemanyaSchema di MySQL adalah database, yang tidak bisa dibuat oleh skrip yang dimuat ke satu database; tabel di dbo mempertahankan namanya.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, functions, procedures, triggers, synonyms, types and partition functionsdicantumkan di laporanKodenya ditulis dalam T-SQL, jadi dicantumkan agar Anda bisa membuatnya ulang.not_converted_objects
scripts without CREATE TABLE (data only)tipe dibaca dari nilaiSkrip yang hanya berisi data hanya punya baris, jadi tipenya diambil dari nilai.no_schema
expressions in INSERT valuesNULLKonverter yang tidak menjalankan database tidak bisa mengevaluasinya.expression_value
types IntoSQL doesn't knowlongtextText memuat nilai apa pun; ubah tipenya setelah pemuatan.unknown_type
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 < sql_server.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 SQL Server untuk hasil terbaik

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

  • Di SSMS, klik kanan database, Tasks, Generate Scripts, lalu pilih tabelnya. dbatools, mssql-scripter, dan alat lain yang dibangun di atas library yang sama menulis skrip yang sama.
  • Di Advanced, atur Types of data to script ke Schema and data. Skrip yang hanya berisi schema punya tabel tanpa baris.
  • Simpan sebagai Unicode, default SSMS, atau sebagai UTF-8: keduanya dibaca dengan cara yang sama, dan gzip juga bisa.

Yang tidak dikonversi

View, fungsi, prosedur, trigger, sinonim, rule, dan kebijakan keamanan ditulis dalam T-SQL. Semuanya dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, sehingga Anda bisa menulis ulang untuk MySQL.

Pertanyaan tentang SQL Server 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.

Apakah file UTF-16 yang disimpan SSMS bisa dibaca?

Ya. SSMS menyimpan skrip sebagai UTF-16 secara default, dan konverter membaca UTF-16 dan UTF-8 sama baiknya, di-gzip atau tidak, dengan GO di antara batch.

Skrip dari versi SQL Server mana yang bisa dipakai?

Skrip yang ditulis SSMS, dbatools, atau mssql-scripter dari SQL Server 2017 ke atas. Setiap skrip uji berasal dari SQL Server 2017, 2022, dan 2025 dan dibandingkan dengan sumbernya sel demi sel.

Apakah nilai IDENTITY dipertahankan?

Ya, untuk satu kolom per tabel: kolom IDENTITY yang mengawali primary key menjadi AUTO_INCREMENT dan berlanjut setelah id tertinggi. Sequence tidak dibuat, karena MySQL tidak punya sequence, dan laporan menyebutkannya.

Apa yang terjadi pada money, datetimeoffset, dan tipe SQL Server lainnya?

bit menjadi tinyint(1), money menjadi decimal(19,4), uniqueidentifier menjadi char(36), dan datetimeoffset menjadi datetime dalam UTC. Schema menjadi awalan nama tabel dalam satu database. Kolom yang mengabaikan huruf besar dan kecil dibandingkan secara persis, dan laporan menyebutkan kolomnya.

Bagaimana dengan prosedur, trigger, dan view?

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 skrip uji dimuat di 5.7 dan 9, dan berhenti di galat pertama jika ada yang salah.