Langsung ke konten
Beranda IntoSQL

Konversi MariaDB ke SQL Server

Letakkan dump dari mariadb-dump, mysqldump, 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.

File Anda
sqlshop_2024_mariadb.sqlFile contoh, 6,6 kB
Database Anda

18 baris dikonversi, 10 perbaikan, tidak ada yang ditolak

Tampilkan

Tabel di shop_2024_mariadb.sqlDump MariaDB 11.8.9-MariaDB-ubu2404 · ditulis oleh mariadb-dump · utf8mb4

  • customers8 baris4
    8 kolom
    idbigint not null
    namenvarchar(200) not null
    emailnvarchar(150) not null
    countrynvarchar(2) not null
    is_activebit not null
    signed_update
    created_atdatetimeoffset(0) not null
    last_ipnvarchar(39)
  • orders10 baris6
    12 kolom
    idbigint not null
    customer_idbigint not null
    statusnvarchar(9) not null
    totaldecimal(10,2) not null
    itemsint not null
    ordered_atdatetime2(0) not null
    shipped_atdatetime2(0)
    notenvarchar(510)
    order_refuniqueidentifier not null
    invoiceint not null
    detailsnvarchar(max)
    updated_atdatetimeoffset(0) not null
-- Written by IntoSQL from a MySQL dump. Load it with: sqlcmd -b -f 65001 -d <database> -i <file>
SET NOCOUNT ON;
SET ANSI_NULLS ON;
SET QUOTED_IDENTIFIER ON;
SET ANSI_PADDING ON;
SET ANSI_WARNINGS ON;
SET ARITHABORT ON;
SET CONCAT_NULL_YIELDS_NULL ON;
SET NUMERIC_ROUNDABORT OFF;
GO

CREATE SEQUENCE [dbo].[invoice_numbers] AS bigint START WITH 2000 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775806;
GO
CREATE TABLE [dbo].[customers] (
    [id] bigint IDENTITY(1001, 1) NOT NULL,
    [name] nvarchar(200) NOT NULL,
    [email] nvarchar(150) NOT NULL,
    [country] nvarchar(2) DEFAULT N'US' NOT NULL,
    [is_active] bit DEFAULT 1 NOT NULL,
    [signed_up] date NULL,
    [created_at] datetimeoffset(0) DEFAULT SYSDATETIMEOFFSET() NOT NULL,
    [last_ip] nvarchar(39) NULL,
    CONSTRAINT [CK_customers_id] CHECK ([id] >= 0),
    CONSTRAINT [PK_customers] PRIMARY KEY ([id])
);
GO

CREATE TABLE [dbo].[orders] (
    [id] bigint IDENTITY(5001, 1) NOT NULL,
    [customer_id] bigint NOT NULL,
    [status] nvarchar(9) DEFAULT N'pending' NOT NULL,
    [total] decimal(10,2) NOT NULL,
    [items] int DEFAULT 1 NOT NULL,
    [ordered_at] datetime2(0) NOT NULL,
    [shipped_at] datetime2(0) NULL,
    [note] nvarchar(510) NULL,
    [order_ref] uniqueidentifier NOT NULL,
    [invoice] int DEFAULT (NEXT VALUE FOR [dbo].[invoice_numbers]) NOT NULL,
    [details] nvarchar(max) NULL,
    [updated_at] datetimeoffset(0) DEFAULT SYSDATETIMEOFFSET() NOT NULL,
    CONSTRAINT [CK_orders_id] CHECK ([id] >= 0),
    CONSTRAINT [CK_orders_customer_id] CHECK ([customer_id] >= 0),
    CONSTRAINT [CK_orders_status] CHECK ([status] IN (N'pending', N'paid', N'shipped', N'cancelled', N'')),
    CONSTRAINT [CK_orders_items] CHECK ([items] >= 0),
    CONSTRAINT [PK_orders] PRIMARY KEY ([id])
);
GO

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

-- Indexes, foreign keys, counters and triggers, after the rows.
CREATE UNIQUE INDEX [uq_email] ON [dbo].[customers] ([email]);
CREATE INDEX [idx_customer] ON [dbo].[orders] ([customer_id]);
CREATE INDEX [idx_status_date] ON [dbo].[orders] ([status], [ordered_at]);
ALTER TABLE [dbo].[orders] WITH NOCHECK ADD CONSTRAINT [fk_orders_customer] FOREIGN KEY ([customer_id]) REFERENCES [dbo].[customers] ([id]);
BEGIN TRY ALTER TABLE [dbo].[orders] WITH CHECK CHECK CONSTRAINT [fk_orders_customer]; END TRY BEGIN CATCH PRINT N'Foreign key ' + N'[fk_orders_customer]' + N' has rows without a parent: it stays unchecked, and new rows are checked.'; END CATCH;
DECLARE @next decimal(38,0) = (SELECT MAX([id]) FROM [dbo].[customers]); IF @next IS NOT NULL BEGIN IF @next < 1000 SET @next = 1000; DBCC CHECKIDENT (N'[dbo].[customers]', RESEED, @next) WITH NO_INFOMSGS; END;
GO
EXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'People who bought at least once', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'customers';
DECLARE @next decimal(38,0) = (SELECT MAX([id]) FROM [dbo].[orders]); IF @next IS NOT NULL BEGIN IF @next < 5000 SET @next = 5000; DBCC CHECKIDENT (N'[dbo].[orders]', RESEED, @next) WITH NO_INFOMSGS; END;
GO
GO
CREATE TRIGGER [dbo].[TR_orders_updated_at_on_update] ON [dbo].[orders] AFTER UPDATE AS
BEGIN
    SET NOCOUNT ON;
    IF NOT UPDATE([updated_at])
        UPDATE x SET [updated_at] = SYSDATETIMEOFFSET() FROM [dbo].[orders] AS x JOIN inserted AS i ON x.[id] = i.[id];
END;
GO
GO

Perbaikan

  1. "id" dari customers bersifat unsigned, jadi menjadi bigint dengan CHECK bahwa nilainya tidak negatif.
  2. "name" di customers berisi karakter yang dihitung dua kali oleh SQL Server, seperti emoji, jadi menjadi nvarchar(200).
  3. "signed_up" dari customers kini mengizinkan NULL: sebagian nilainya tidak bisa disimpan dan menjadi NULL.
  4. Default "signed_up" di customers, 0000‑00‑00, bukan tanggal yang diterima SQL Server, jadi kolom itu tanpa default.
  5. "customer_id" dari orders bersifat unsigned, jadi menjadi bigint dengan CHECK bahwa nilainya tidak negatif.
  6. "id" dari orders bersifat unsigned, jadi menjadi bigint dengan CHECK bahwa nilainya tidak negatif.
  7. "items" dari orders bersifat unsigned, jadi menjadi int dengan CHECK bahwa nilainya tidak negatif.
  8. "note" di orders berisi karakter yang dihitung dua kali oleh SQL Server, seperti emoji, jadi menjadi nvarchar(510).
  9. 1 baris dari "status" di orders berisi nilai kosong yang disimpan MySQL untuk entri tidak valid; CHECK untuk nilainya mengizinkannya.
  10. "updated_at" dari orders berubah ke waktu saat ini di setiap pembaruan; di SQL Server, trigger yang melakukannya.

Perlu diperiksa

  • 1 nilai di "signed_up" dari customers adalah tanggal nol atau mustahil, misalnya 0000‑00‑00, yang tidak bisa disimpan SQL Server, jadi menjadi NULL. Jika tanggal itu bermakna, ganti di sumber dengan tanggal sungguhan sebelum membuat dump.
  • 1 nilai di "shipped_at" dari orders adalah tanggal nol atau mustahil, misalnya 0000‑00‑00 00:00:00, yang tidak bisa disimpan SQL Server, jadi menjadi NULL. Jika tanggal itu bermakna, ganti di sumber dengan tanggal sungguhan sebelum membuat dump.

File Anda dikonversi di komputer ini dan tidak pernah diunggah.

Contoh lain:

Yang berubah dari MariaDB ke SQL Server

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

  • TINYINT(1), BOOL

    bit jika setiap nilai 0 atau 1, selain itu smallint

    BOOL di MySQL adalah TINYINT(1) yang bisa berisi angka apa pun dari -128 sampai 127. Kolom yang hanya berisi 0 dan 1 menjadi bit; kolom yang berisi 2 atau -1 tetap berupa angka agar tidak ada nilai yang berubah makna.

    Baris laporan: 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)

    SQL Server tidak punya bilangan bulat unsigned kecuali tinyint, yang bernilai 0 sampai 255. Tipe yang lebih lebar memuat seluruh rentang unsigned, dan CHECK mencegah nilai negatif seperti di MySQL.

    Baris laporan: unsigned_widened

  • ZEROFILL and display widths

    dihapus

    Isian nol adalah cara menampilkan angka, bukan bagian dari angka. Angkanya dipertahankan; format saat dibaca jika isian itu penting.

    Baris laporan: zerofill_dropped

  • FLOAT(M,D)

    real atau float, tanpa skala

    Bilangan floating-point SQL Server tidak punya skala tetap. Nilai yang tersimpan disalin apa adanya.

    Baris laporan: float_scale_dropped

  • DECIMAL(p,s)

    decimal(p,s) sampai 38 digit; nvarchar jika lebih

    decimal di SQL Server memuat 38 digit. Desimal yang lebih lebar disimpan sebagai teks agar setiap digit tetap tepat.

    Baris laporan: decimal_as_text

  • BIT(1), BIT(n)

    bit; bigint sampai 63 bit; decimal(20,0) untuk BIT(64)

    Satu bit berarti ya atau tidak; field bit yang lebih lebar disimpan sebagai angka yang dibentuk bit-bitnya.

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

    NULL

    SQL Server hanya menyimpan tanggal kalender yang nyata. MySQL menyimpan tanggal nol dan mustahil jika mode SQL-nya mengizinkan; tanggal itu menjadi NULL dan laporan menghitungnya.

    Baris laporan: invalid_date_null

  • 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

  • DEFAULT '0000-00-00'

    tanpa default

    Default yang tidak bisa disimpan SQL Server dihilangkan, bukan diganti dengan tanggal karangan.

    Baris laporan: zero_date_default

  • TIME

    time jika setiap nilai dalam sehari, selain itu nvarchar

    TIME di MySQL adalah durasi dari -838:59:59 sampai 838:59:59; time di SQL Server adalah jam dalam sehari. Kolom dengan nilai lebih panjang atau negatif menyimpannya sebagai teks.

    Baris laporan: time_as_interval

  • YEAR

    smallint dengan CHECK rentangnya

    SQL Server tidak punya tipe tahun; CHECK mempertahankan nilai yang sama dengan yang diizinkan MySQL.

  • CHAR(n), VARCHAR(n)

    nvarchar(n)

    nvarchar memuat setiap karakter di setiap versi yang didukung, dan MySQL mengembalikan nilai CHAR tanpa spasi di akhir, sebagaimana nvarchar menyimpannya.

  • text with characters past U+FFFF (emoji) in VARCHAR(n)

    nvarchar(2n), atau nvarchar(max) jika lebih dari 4000

    nvarchar menghitung unit UTF-16 dan satu emoji memakai dua, jadi kolomnya diberi ruang untuk setiap nilai.

    Baris laporan: text_length_widened

  • DATETIME

    datetime2

    DATETIME adalah pembacaan jam dinding tanpa zona waktu, seperti datetime2.

  • TIMESTAMP

    datetimeoffset dalam zona waktu yang disebutkan dump, UTC jika tidak disebutkan

    TIMESTAMP adalah satu momen. Dump menyebutkan zona tempat nilainya ditulis (mysqldump menulis UTC); tanpa itu, nilainya dibaca sebagai UTC dan laporan menyebutkannya.

    Baris laporan: timestamp_zone_assumed

  • ENUM

    nvarchar dengan CHECK nilainya

    Text dengan CHECK mempertahankan nilai yang sama.

  • ENUM holding '' (MySQL's error value)

    nilai kosong yang diizinkan CHECK

    MySQL menyimpan string kosong saat nilai tidak valid masuk ke ENUM dalam mode SQL yang longgar. Baris itu dipertahankan dan CHECK mengizinkannya.

    Baris laporan: enum_invalid_value

  • ENUM holding values outside its list

    tanpa CHECK

    Nilai yang tidak ada di daftar akan gagal di CHECK, jadi CHECK tidak dibuat.

    Baris laporan: enum_check_skipped

  • SET

    nvarchar seperti yang ditulis MySQL ('a,b')

    SQL Server tidak punya array; teksnya sama dengan yang dikembalikan MySQL.

  • JSON

    nvarchar(max)

    Fungsi JSON SQL Server membaca JSON dari teks. CHECK ISJSON akan menolak nilai skalar seperti 1 atau "x" sebelum SQL Server 2022, padahal MySQL menyimpannya.

  • NUL bytes in text

    dipertahankan

    nvarchar bisa memuat karakter NUL, jadi nilainya disalin apa adanya.

  • text that isn't valid in its character set

    byte yang rusak menjadi karakter pengganti

    Teks harus dibaca sebagai karakter agar bisa ditulis sebagai nvarchar.

    Baris laporan: invalid_utf8_replaced

  • text decoded twice (ñ)

    disalin apa adanya

    Dump berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.

    Baris laporan: mojibake_suspected

  • AUTO_INCREMENT

    IDENTITY, dengan penghitung diatur melewati id yang disalin

    Id yang disalin dimuat dengan IDENTITY_INSERT, dan penghitung berlanjut setelah id tertinggi atau AUTO_INCREMENT dari dump, mana yang lebih tinggi.

  • MyISAM AUTO_INCREMENT on the second column of a key

    satu penghitung untuk tabel

    MyISAM menghitung per grup kolom pertama kunci; SQL Server punya satu penghitung per tabel.

    Baris laporan: myisam_group_autoincrement

  • ON UPDATE CURRENT_TIMESTAMP

    trigger AFTER UPDATE

    Trigger mengatur kolom ke waktu saat ini ketika pembaruan tidak mengaturnya. Trigger melakukan join pada primary key, jadi tabel memerlukannya.

    Baris laporan: on_update_trigger

  • ON UPDATE CURRENT_TIMESTAMP on a table without a primary key

    tidak dibawa

    Trigger menemukan baris yang diperbarui lewat primary key-nya; tanpa itu, trigger tidak bisa.

    Baris laporan: on_update_without_key

  • generated columns

    kolom computed, PERSISTED jika sumber menyimpannya

    SQL Server menghitungnya dengan dua cara yang sama.

  • generated columns with functions SQL Server lacks

    kolom biasa

    Rumus yang tidak bisa ditulis untuk SQL Server menyisakan kolom biasa dan satu baris laporan.

    Baris laporan: generated_not_translated

  • INVISIBLE columns

    kolom biasa

    SQL Server tidak punya kolom yang tidak terlihat.

    Baris laporan: invisible_column

  • CHECK constraints

    diterjemahkan, langsung di CREATE TABLE

    CHECK di dalam tabel diuji saat setiap baris dimuat.

  • CHECK constraints with functions SQL Server lacks

    tidak dibuat

    CHECK yang tidak bisa ditulis untuk SQL Server dihilangkan dan dilaporkan.

    Baris laporan: check_skipped

  • CHECK ... NOT ENFORCED

    tidak dibuat

    MySQL menyimpan CHECK ini tanpa menerapkannya, jadi baris bisa melanggarnya.

    Baris laporan: check_not_enforced

  • defaults with functions SQL Server lacks

    tanpa default

    Default yang tidak bisa ditulis untuk SQL Server dihilangkan dan dilaporkan.

    Baris laporan: default_not_translated

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

    indeks pada seluruh kolom

    SQL Server mengindeks seluruh kolom; kunci yang unik pada prefiks juga unik pada seluruh kolom, jadi setiap baris dimuat.

    Baris laporan: prefix_whole_column

  • FULLTEXT indexes

    tidak dibuat

    Pencarian teks lengkap SQL Server memerlukan katalog dan kueri sendiri.

    Baris laporan: fulltext_not_created

  • SPATIAL indexes

    tidak dibuat

    Indeks spasial pada kolom geometry memerlukan bounding box yang tidak disebutkan dump.

    Baris laporan: spatial_index_not_created

  • functional indexes, and indexes on columns of unlimited length

    tidak dibuat

    SQL Server tidak mengindeks ekspresi maupun kolom nvarchar(max) dan varbinary(max).

    Baris laporan: index_skipped

  • foreign keys

    setelah data WITH NOCHECK, lalu diperiksa dengan peringatan untuk baris yatim

    Dump dimuat dengan FOREIGN_KEY_CHECKS=0 dan MyISAM tidak pernah memeriksa, jadi baris tanpa induk umum ditemukan. Key dibuat lebih dulu dan diperiksa terakhir; baris yatim membuatnya tetap tidak diperiksa dengan peringatan, bukan menghentikan pemuatan.

  • ON DELETE or ON UPDATE that cascades in a cycle or along a second path

    NO ACTION

    SQL Server menolak cascade yang bisa mencapai satu tabel dua kali; MySQL mengizinkannya.

    Baris laporan: foreign_key_action_dropped

  • foreign keys to columns without a unique key

    tidak dibuat

    SQL Server memerlukan primary key atau indeks unik tanpa NULL pada kolom yang dirujuk; InnoDB tidak.

    Baris laporan: foreign_key_skipped

  • table and column names

    seperti ditulis; diganti nama jika hanya berbeda huruf besar-kecil

    Nama di SQL Server tidak membedakan huruf besar-kecil dengan collation yang biasa.

    Baris laporan: identifier_renamed

  • names over 116 characters

    dipersingkat

    Nama di SQL Server memuat 128 karakter, sebagian untuk angka yang membedakan nama.

    Baris laporan: name_shortened

  • GEOMETRY, POINT, POLYGON...

    geometry, dengan SRID setiap nilai

    Tipe geometry milik SQL Server mempertahankan setiap bentuk dan sistem referensi spasialnya.

  • INET4, INET6, UUID (MariaDB)

    nvarchar(39), uniqueidentifier

    uniqueidentifier adalah UUID di SQL Server; alamat disimpan sebagai teks.

  • BINARY, VARBINARY, BLOB

    binary, varbinary, varbinary(max)

    Byte tetap byte.

  • PARTITION BY

    satu tabel

    Barisnya sama; partisi ulang tabel di SQL Server jika diperlukan.

    Baris laporan: partitions_dropped

  • WITH SYSTEM VERSIONING (MariaDB)

    tabel dengan baris saat ini

    Dump hanya berisi baris saat ini.

    Baris laporan: system_versioning_dropped

  • MyISAM, MEMORY and other engines

    tabel biasa

    SQL Server punya satu engine tabel.

    Baris laporan: engine_dropped

  • views, triggers, procedures, functions and events

    dicantumkan di laporan

    Kodenya ditulis dalam bahasa MySQL, jadi dicantumkan agar Anda bisa membuatnya ulang.

    Baris laporan: not_converted_objects

  • dumps without CREATE TABLE

    tipe dibaca dari nilai

    Dump yang dibuat dengan --no-create-info hanya berisi baris, jadi tipenya diambil dari nilai.

    Baris laporan: no_schema

  • geometries in a dump without CREATE TABLE

    geometry

    Format geometri MySQL dikenali dari nilainya.

  • _ci collations

    collation database, biasanya tidak membedakan huruf besar-kecil

    SQL Server membandingkan teks tanpa membedakan huruf besar-kecil dengan collation yang biasa, seperti _ci di MySQL.

  • SET NAMES utf8 from utf8mb4 tables

    dikonversi, dengan peringatan

    mysqldump di MySQL 5.x secara default menulis utf8 3 byte dan mengganti setiap emoji dengan tanda tanya sebelum konverter mana pun melihat file itu.

    Baris laporan: dump_lost_four_byte_chars

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

    dibaca sebagai Latin-1 (Windows-1252)

    latin1 di MySQL adalah Windows-1252, pengodean yang biasa dipakai dump semacam itu.

    Baris laporan: charset_guessed

  • sjis, cp932, gbk, big5 dumps

    dibaca sebagai UTF-8, dengan peringatan

    Pengodean ini belum didekode.

    Baris laporan: unsupported_charset

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

    dievaluasi

    Beberapa alat dump menulis nilai sebagai panggilan ini; panggilan itu dibaca sebagai nilai yang dihasilkannya, dengan WKT geografis diubah agar longitude lebih dulu.

  • other expressions in rows

    NULL

    Konverter yang tidak menjalankan database tidak bisa mengevaluasinya.

    Baris laporan: expression_value

  • DEFAULT in VALUES

    nilai default kolom

    Default literal disalin ke baris.

    Baris laporan: default_keyword_filled

  • DEFAULT in VALUES without a literal default

    NULL

    Tidak ada nilai untuk disalin.

    Baris laporan: default_keyword_null

  • REPLACE and INSERT IGNORE

    baris biasa

    Dump punya satu baris per kunci, jadi barisnya sama.

    Baris laporan: replace_as_insert

  • types IntoSQL doesn't know

    nvarchar(max)

    Text memuat nilai apa pun; ubah tipenya setelah pemuatan.

    Baris laporan: unknown_type

  • values that don't fit their column

    NULL

    Dump yang rusak atau ditulis manual bisa berisi nilai yang tidak muat di kolomnya; nilai itu menjadi NULL agar sisanya tetap dimuat.

    Baris laporan: invalid_value_null

  • unreadable geometries

    NULL

    Byte yang bukan geometri tidak bisa disimpan sebagai geometri.

    Baris laporan: bad_geometry

  • CREATE SEQUENCE (MariaDB)

    CREATE SEQUENCE ... AS bigint, dengan nilai berikutnya

    SQL Server punya sequence dengan opsi yang sama; masing-masing berlanjut dari posisi terakhir di dump.

  • VECTOR(n) (MariaDB 11.7+)

    nvarchar(max) dengan float sebagai array JSON

    Hanya SQL Server 2025 yang punya tipe vektor; array JSON mempertahankan setiap float di setiap versi.

    Baris laporan: type_replaced

Di MariaDBDi SQL ServerBaris laporan
TINYINT(1), BOOLbit jika setiap nilai 0 atau 1, selain itu smallintBOOL di MySQL adalah TINYINT(1) yang bisa berisi angka apa pun dari -128 sampai 127. Kolom yang hanya berisi 0 dan 1 menjadi bit; kolom yang berisi 2 atau -1 tetap berupa angka agar tidak ada nilai yang berubah makna.bool_kept_numeric
UNSIGNED integersTINYINT 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)SQL Server tidak punya bilangan bulat unsigned kecuali tinyint, yang bernilai 0 sampai 255. Tipe yang lebih lebar memuat seluruh rentang unsigned, dan CHECK mencegah nilai negatif seperti di MySQL.unsigned_widened
ZEROFILL and display widthsdihapusIsian nol adalah cara menampilkan angka, bukan bagian dari angka. Angkanya dipertahankan; format saat dibaca jika isian itu penting.zerofill_dropped
FLOAT(M,D)real atau float, tanpa skalaBilangan floating-point SQL Server tidak punya skala tetap. Nilai yang tersimpan disalin apa adanya.float_scale_dropped
DECIMAL(p,s)decimal(p,s) sampai 38 digit; nvarchar jika lebihdecimal di SQL Server memuat 38 digit. Desimal yang lebih lebar disimpan sebagai teks agar setiap digit tetap tepat.decimal_as_text
BIT(1), BIT(n)bit; bigint sampai 63 bit; decimal(20,0) untuk BIT(64)Satu bit berarti ya atau tidak; field bit yang lebih lebar disimpan sebagai angka yang dibentuk bit-bitnya.
zero, partial or impossible dates (0000-00-00, 2024-02-30)NULLSQL Server hanya menyimpan tanggal kalender yang nyata. MySQL menyimpan tanggal nol dan mustahil jika mode SQL-nya mengizinkan; tanggal itu menjadi NULL dan laporan menghitungnya.invalid_date_null
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
DEFAULT '0000-00-00'tanpa defaultDefault yang tidak bisa disimpan SQL Server dihilangkan, bukan diganti dengan tanggal karangan.zero_date_default
TIMEtime jika setiap nilai dalam sehari, selain itu nvarcharTIME di MySQL adalah durasi dari -838:59:59 sampai 838:59:59; time di SQL Server adalah jam dalam sehari. Kolom dengan nilai lebih panjang atau negatif menyimpannya sebagai teks.time_as_interval
YEARsmallint dengan CHECK rentangnyaSQL Server tidak punya tipe tahun; CHECK mempertahankan nilai yang sama dengan yang diizinkan MySQL.
CHAR(n), VARCHAR(n)nvarchar(n)nvarchar memuat setiap karakter di setiap versi yang didukung, dan MySQL mengembalikan nilai CHAR tanpa spasi di akhir, sebagaimana nvarchar menyimpannya.
text with characters past U+FFFF (emoji) in VARCHAR(n)nvarchar(2n), atau nvarchar(max) jika lebih dari 4000nvarchar menghitung unit UTF-16 dan satu emoji memakai dua, jadi kolomnya diberi ruang untuk setiap nilai.text_length_widened
DATETIMEdatetime2DATETIME adalah pembacaan jam dinding tanpa zona waktu, seperti datetime2.
TIMESTAMPdatetimeoffset dalam zona waktu yang disebutkan dump, UTC jika tidak disebutkanTIMESTAMP adalah satu momen. Dump menyebutkan zona tempat nilainya ditulis (mysqldump menulis UTC); tanpa itu, nilainya dibaca sebagai UTC dan laporan menyebutkannya.timestamp_zone_assumed
ENUMnvarchar dengan CHECK nilainyaText dengan CHECK mempertahankan nilai yang sama.
ENUM holding '' (MySQL's error value)nilai kosong yang diizinkan CHECKMySQL menyimpan string kosong saat nilai tidak valid masuk ke ENUM dalam mode SQL yang longgar. Baris itu dipertahankan dan CHECK mengizinkannya.enum_invalid_value
ENUM holding values outside its listtanpa CHECKNilai yang tidak ada di daftar akan gagal di CHECK, jadi CHECK tidak dibuat.enum_check_skipped
SETnvarchar seperti yang ditulis MySQL ('a,b')SQL Server tidak punya array; teksnya sama dengan yang dikembalikan MySQL.
JSONnvarchar(max)Fungsi JSON SQL Server membaca JSON dari teks. CHECK ISJSON akan menolak nilai skalar seperti 1 atau "x" sebelum SQL Server 2022, padahal MySQL menyimpannya.
NUL bytes in textdipertahankannvarchar bisa memuat karakter NUL, jadi nilainya disalin apa adanya.
text that isn't valid in its character setbyte yang rusak menjadi karakter penggantiTeks harus dibaca sebagai karakter agar bisa ditulis sebagai nvarchar.invalid_utf8_replaced
text decoded twice (ñ)disalin apa adanyaDump berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.mojibake_suspected
AUTO_INCREMENTIDENTITY, dengan penghitung diatur melewati id yang disalinId yang disalin dimuat dengan IDENTITY_INSERT, dan penghitung berlanjut setelah id tertinggi atau AUTO_INCREMENT dari dump, mana yang lebih tinggi.
MyISAM AUTO_INCREMENT on the second column of a keysatu penghitung untuk tabelMyISAM menghitung per grup kolom pertama kunci; SQL Server punya satu penghitung per tabel.myisam_group_autoincrement
ON UPDATE CURRENT_TIMESTAMPtrigger AFTER UPDATETrigger mengatur kolom ke waktu saat ini ketika pembaruan tidak mengaturnya. Trigger melakukan join pada primary key, jadi tabel memerlukannya.on_update_trigger
ON UPDATE CURRENT_TIMESTAMP on a table without a primary keytidak dibawaTrigger menemukan baris yang diperbarui lewat primary key-nya; tanpa itu, trigger tidak bisa.on_update_without_key
generated columnskolom computed, PERSISTED jika sumber menyimpannyaSQL Server menghitungnya dengan dua cara yang sama.
generated columns with functions SQL Server lackskolom biasaRumus yang tidak bisa ditulis untuk SQL Server menyisakan kolom biasa dan satu baris laporan.generated_not_translated
INVISIBLE columnskolom biasaSQL Server tidak punya kolom yang tidak terlihat.invisible_column
CHECK constraintsditerjemahkan, langsung di CREATE TABLECHECK di dalam tabel diuji saat setiap baris dimuat.
CHECK constraints with functions SQL Server lackstidak dibuatCHECK yang tidak bisa ditulis untuk SQL Server dihilangkan dan dilaporkan.check_skipped
CHECK ... NOT ENFORCEDtidak dibuatMySQL menyimpan CHECK ini tanpa menerapkannya, jadi baris bisa melanggarnya.check_not_enforced
defaults with functions SQL Server lackstanpa defaultDefault yang tidak bisa ditulis untuk SQL Server dihilangkan dan dilaporkan.default_not_translated
keys and indexes on a prefix, c(20)indeks pada seluruh kolomSQL Server mengindeks seluruh kolom; kunci yang unik pada prefiks juga unik pada seluruh kolom, jadi setiap baris dimuat.prefix_whole_column
FULLTEXT indexestidak dibuatPencarian teks lengkap SQL Server memerlukan katalog dan kueri sendiri.fulltext_not_created
SPATIAL indexestidak dibuatIndeks spasial pada kolom geometry memerlukan bounding box yang tidak disebutkan dump.spatial_index_not_created
functional indexes, and indexes on columns of unlimited lengthtidak dibuatSQL Server tidak mengindeks ekspresi maupun kolom nvarchar(max) dan varbinary(max).index_skipped
foreign keyssetelah data WITH NOCHECK, lalu diperiksa dengan peringatan untuk baris yatimDump dimuat dengan FOREIGN_KEY_CHECKS=0 dan MyISAM tidak pernah memeriksa, jadi baris tanpa induk umum ditemukan. Key dibuat lebih dulu dan diperiksa terakhir; baris yatim membuatnya tetap tidak diperiksa dengan peringatan, bukan menghentikan pemuatan.
ON DELETE or ON UPDATE that cascades in a cycle or along a second pathNO ACTIONSQL Server menolak cascade yang bisa mencapai satu tabel dua kali; MySQL mengizinkannya.foreign_key_action_dropped
foreign keys to columns without a unique keytidak dibuatSQL Server memerlukan primary key atau indeks unik tanpa NULL pada kolom yang dirujuk; InnoDB tidak.foreign_key_skipped
table and column namesseperti ditulis; diganti nama jika hanya berbeda huruf besar-kecilNama di SQL Server tidak membedakan huruf besar-kecil dengan collation yang biasa.identifier_renamed
names over 116 charactersdipersingkatNama di SQL Server memuat 128 karakter, sebagian untuk angka yang membedakan nama.name_shortened
GEOMETRY, POINT, POLYGON...geometry, dengan SRID setiap nilaiTipe geometry milik SQL Server mempertahankan setiap bentuk dan sistem referensi spasialnya.
INET4, INET6, UUID (MariaDB)nvarchar(39), uniqueidentifieruniqueidentifier adalah UUID di SQL Server; alamat disimpan sebagai teks.
BINARY, VARBINARY, BLOBbinary, varbinary, varbinary(max)Byte tetap byte.
PARTITION BYsatu tabelBarisnya sama; partisi ulang tabel di SQL Server jika diperlukan.partitions_dropped
WITH SYSTEM VERSIONING (MariaDB)tabel dengan baris saat iniDump hanya berisi baris saat ini.system_versioning_dropped
MyISAM, MEMORY and other enginestabel biasaSQL Server punya satu engine tabel.engine_dropped
views, triggers, procedures, functions and eventsdicantumkan di laporanKodenya ditulis dalam bahasa MySQL, jadi dicantumkan agar Anda bisa membuatnya ulang.not_converted_objects
dumps without CREATE TABLEtipe dibaca dari nilaiDump yang dibuat dengan --no-create-info hanya berisi baris, jadi tipenya diambil dari nilai.no_schema
geometries in a dump without CREATE TABLEgeometryFormat geometri MySQL dikenali dari nilainya.
_ci collationscollation database, biasanya tidak membedakan huruf besar-kecilSQL Server membandingkan teks tanpa membedakan huruf besar-kecil dengan collation yang biasa, seperti _ci di MySQL.
SET NAMES utf8 from utf8mb4 tablesdikonversi, dengan peringatanmysqldump di MySQL 5.x secara default menulis utf8 3 byte dan mengganti setiap emoji dengan tanda tanya sebelum konverter mana pun melihat file itu.dump_lost_four_byte_chars
dumps without SET NAMES whose text isn't UTF-8dibaca sebagai Latin-1 (Windows-1252)latin1 di MySQL adalah Windows-1252, pengodean yang biasa dipakai dump semacam itu.charset_guessed
sjis, cp932, gbk, big5 dumpsdibaca sebagai UTF-8, dengan peringatanPengodean ini belum didekode.unsupported_charset
UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rowsdievaluasiBeberapa alat dump menulis nilai sebagai panggilan ini; panggilan itu dibaca sebagai nilai yang dihasilkannya, dengan WKT geografis diubah agar longitude lebih dulu.
other expressions in rowsNULLKonverter yang tidak menjalankan database tidak bisa mengevaluasinya.expression_value
DEFAULT in VALUESnilai default kolomDefault literal disalin ke baris.default_keyword_filled
DEFAULT in VALUES without a literal defaultNULLTidak ada nilai untuk disalin.default_keyword_null
REPLACE and INSERT IGNOREbaris biasaDump punya satu baris per kunci, jadi barisnya sama.replace_as_insert
types IntoSQL doesn't knownvarchar(max)Text memuat nilai apa pun; ubah tipenya setelah pemuatan.unknown_type
values that don't fit their columnNULLDump yang rusak atau ditulis manual bisa berisi nilai yang tidak muat di kolomnya; nilai itu menjadi NULL agar sisanya tetap dimuat.invalid_value_null
unreadable geometriesNULLByte yang bukan geometri tidak bisa disimpan sebagai geometri.bad_geometry
CREATE SEQUENCE (MariaDB)CREATE SEQUENCE ... AS bigint, dengan nilai berikutnyaSQL Server punya sequence dengan opsi yang sama; masing-masing berlanjut dari posisi terakhir di dump.
VECTOR(n) (MariaDB 11.7+)nvarchar(max) dengan float sebagai array JSONHanya SQL Server 2025 yang punya tipe vektor; array JSON mempertahankan setiap float di setiap versi.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.

sqlcmd -b -f 65001 -S localhost -d mydb -i mariadb.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 MariaDB 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 utf8mb3 sebelum konverter melihatnya.
  • --hex-blob menulis kolom biner dan nilai VECTOR 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 MariaDB sendiri. Semuanya dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, sehingga Anda bisa menulis ulang untuk SQL Server.

Pertanyaan tentang MariaDB ke SQL Server

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.

Dump dari versi MariaDB mana yang bisa dipakai?

Dump dari mariadb-dump dan mysqldump di MariaDB 10.3 sampai 12, dengan satu INSERT per tabel atau satu per baris. Setiap dump uji berasal dari MariaDB 10.11, 11.4, dan 11.8 dan dibandingkan dengan sumbernya sel demi sel.

Apakah kolom UUID, INET6, JSON, dan VECTOR dipertahankan?

UUID menjadi uniqueidentifier, kolom INET menjadi nvarchar, JSON menjadi nvarchar(max), dan VECTOR menjadi array JSON berisi float-nya. Tanggal nol menjadi NULL dan laporan menghitungnya.

Apakah nilai AUTO_INCREMENT dan sequence dipertahankan?

Ya. Setiap kolom AUTO_INCREMENT menjadi kolom IDENTITY yang berlanjut setelah id tertinggi. Sequence menjadi sequence SQL Server, dan default yang mengambil nilai dari sequence tetap mengambil dari sana.

Bagaimana dengan stored procedure dan trigger?

Semuanya dicantumkan di laporan berdasarkan nama dan tidak dikonversi, karena setiap database menulisnya dalam bahasanya sendiri.

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.