İçeriğe geç
IntoSQL ana sayfası

MySQL - SQL Server dönüştürme

mysqldump, mariadb-dump, mysqlpump, phpMyAdmin veya Adminer ile alınmış bir dökümü .sql veya .sql.gz olarak bırakın ve aynı tablolar, anahtarlar, indeksler ve verilerle bir SQL Server betiği indirin. SQL Server tarafından olduğu gibi tutulamayan her değer ve taşınmayan her nesne raporda listelenir.

Dosyanız
sqlshop_2024.sqlÖrnek dosya, 5,1 kB
Veritabanınız

18 satır dönüştürüldü, 10 düzeltme, reddedilen yok

Göster

shop_2024.sql içindeki tablolarMySQL 8.0.46 dökümü · mysqldump ile yazıldı · utf8mb4

  • customers8 satır4
    7 sütun
    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
  • orders10 satır6
    9 sütun
    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)
    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 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,
    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,
    [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]) VALUES
(1,N'Ana Martínez',N'ana@example.com',N'MX',1,'2023-01-15','2023-01-15 10:24:00+00:00'),
(2,N'Zoë Müller',N'zoe@example.de',N'DE',1,'2023-02-03','2023-02-03 08:11:42+00:00'),
(3,N'José Peña',N'jose@example.es',N'ES',0,'2023-03-21','2023-03-21 19:05:17+00:00'),
(4,N'李雷',N'lilei@example.cn',N'CN',1,'2023-05-09','2023-05-09 02:40:00+00:00'),
(5,N'Noah O''Brien',N'noah@example.ie',N'IE',1,NULL,'2023-06-30 14:00:00+00:00'),
(6,N'Amélie Laurent',N'amelie@example.fr',N'FR',1,'2024-01-02','2024-01-02 09:30:00+00:00'),
(7,N'Ravi Patel',N'ravi@example.in',N'IN',0,'2024-02-29','2024-02-29 23:59:59+00:00'),
(8,N'Sofia Rossi 🌻',N'sofia@example.it',N'IT',1,'2024-04-12','2024-04-12 12:12:12+00:00');
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], [updated_at]) VALUES
(1,1,N'shipped',129.90,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL,'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 🎁','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','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'请小心轻放','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','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"','2024-03-11 09:00:00+00:00'),
(7,8,N'paid',76.20,2,'2024-03-11 18:45:00',NULL,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','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','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','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

Düzeltmeler

  1. customers tablosunun "id" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile bigint oldu.
  2. customers tablosunun "name" sütunu, emoji gibi SQL Server tarafından iki kez sayılan karakterler içerir; bu yüzden nvarchar(200) olur.
  3. customers tablosunun "signed_up" sütunu artık NULL kabul ediyor: bazı değerleri saklanamadı ve NULL oldu.
  4. customers tablosundaki "signed_up" sütununun varsayılan değeri 0000‑00‑00, SQL Server'in kabul ettiği bir tarih değil; bu yüzden sütunun varsayılan değeri yok.
  5. orders tablosunun "customer_id" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile bigint oldu.
  6. orders tablosunun "id" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile bigint oldu.
  7. orders tablosunun "items" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile int oldu.
  8. orders tablosunun "note" sütunu, emoji gibi SQL Server tarafından iki kez sayılan karakterler içerir; bu yüzden nvarchar(510) olur.
  9. orders tablosundaki "status" sütununun 1 satırı MySQL'in geçersiz girişler için sakladığı boş değeri içeriyor; değerleri denetleyen CHECK buna izin veriyor.
  10. orders tablosunun "updated_at" sütunu her güncellemede geçerli zamana ayarlanıyor; SQL Server'de bunu bir tetikleyici yapıyor.

Kontrol edilmeli

  • customers tablosunun "signed_up" sütununda 0000‑00‑00 gibi 1 sıfır veya imkansız tarih var; SQL Server bunları saklayamaz, bu yüzden NULL yapıldı. Bu tarihler bir anlam taşıyorsa döküm almadan önce kaynakta gerçek tarihlerle değiştirin.
  • orders tablosunun "shipped_at" sütununda 0000‑00‑00 00:00:00 gibi 1 sıfır veya imkansız tarih var; SQL Server bunları saklayamaz, bu yüzden NULL yapıldı. Bu tarihler bir anlam taşıyorsa döküm almadan önce kaynakta gerçek tarihlerle değiştirin.

Dosyan bu bilgisayarda dönüştürülür ve asla yüklenmez.

Diğer örnekler:

MySQL ile SQL Server arasında neler değişir

Her satır, dönüştürücünün uyguladığı bir kuraldır; yanında, kural verilerinizde bir şeyi değiştirdiğinde yazılan rapor satırı yer alır.

  • TINYINT(1), BOOL

    her değer 0 veya 1 ise bit, değilse smallint

    MySQL'in BOOL türü, -128 ile 127 arasında herhangi bir sayıyı tutabilen bir TINYINT(1)'dir. Yalnızca 0 ve 1 tutan bir sütun bit olur; 2 veya -1 tutan bir sütun sayı olarak kalır, böylece hiçbir değerin anlamı değişmez.

    Rapor satırı: bool_kept_numeric

  • UNSIGNED integers

    TINYINT UNSIGNED tinyint olarak; diğerleri negatif olmadığını denetleyen bir CHECK ile bir sonraki geniş tam sayı, BIGINT UNSIGNED her değer sığıyorsa bigint, değilse decimal(38,0)

    SQL Server'da 0 ile 255 arasındaki tinyint dışında işaretsiz tam sayı yoktur. Daha geniş bir tür tüm işaretsiz aralığı tutar ve CHECK, MySQL'deki gibi negatif değerleri dışarıda tutar.

    Rapor satırı: unsigned_widened

  • ZEROFILL and display widths

    kaldırılır

    Sıfır dolgusu bir sayının gösterilme biçimidir, sayının parçası değildir. Sayılar korunur; dolgu önemliyse okurken biçimlendirin.

    Rapor satırı: zerofill_dropped

  • FLOAT(M,D)

    ölçek olmadan real veya float

    SQL Server'da kayan noktalı sayıların sabit ölçeği yoktur. Saklanan değerler olduğu gibi kopyalanır.

    Rapor satırı: float_scale_dropped

  • DECIMAL(p,s)

    38 basamağa kadar decimal(p,s); ötesi nvarchar

    SQL Server'ın decimal türü 38 basamak tutar. Daha geniş ondalıklar her basamak tam kalsın diye metin olarak korunur.

    Rapor satırı: decimal_as_text

  • BIT(1), BIT(n)

    bit; 63 bite kadar bigint; BIT(64) için decimal(20,0)

    Tek bir bit evet veya hayırdır; daha geniş bit alanları bitlerinin oluşturduğu sayı olarak saklanır.

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

    NULL

    SQL Server yalnızca gerçek takvim tarihlerini saklar. MySQL, SQL modu izin verdiğinde sıfır ve imkansız tarihleri tutar; bunlar NULL olur ve rapor bunları sayar.

    Rapor satırı: invalid_date_null

  • NOT NULL columns with values that become NULL

    NOT NULL kaldırılır

    Değerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur.

    Rapor satırı: not_null_relaxed

  • DEFAULT '0000-00-00'

    varsayılan değer yok

    SQL Server'ın saklayamadığı bir varsayılan değer, uydurma bir tarihle değiştirilmek yerine dışarıda bırakılır.

    Rapor satırı: zero_date_default

  • TIME

    her değer bir gün içindeyse time, değilse nvarchar

    MySQL'in TIME türü -838:59:59 ile 838:59:59 arasında bir süredir; SQL Server'ın time türü günün saatidir. Daha uzun veya negatif değerleri olan bir sütun onları metin olarak korur.

    Rapor satırı: time_as_interval

  • YEAR

    aralığını denetleyen bir CHECK ile smallint

    SQL Server'da yıl türü yoktur; CHECK, MySQL'in izin verdiği değerlerin aynısını korur.

  • CHAR(n), VARCHAR(n)

    nvarchar(n)

    nvarchar desteklenen her sürümde her karakteri tutar ve MySQL CHAR değerlerini sondaki boşluklar olmadan döndürür, nvarchar da onları öyle korur.

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

    nvarchar(2n), 4000'i aşınca nvarchar(max)

    nvarchar UTF-16 birimlerini sayar ve bir emoji iki birim tutar; bu yüzden sütuna her değer için yer verilir.

    Rapor satırı: text_length_widened

  • DATETIME

    datetime2

    DATETIME, datetime2 gibi saat dilimi olmayan bir duvar saati okumasıdır.

  • TIMESTAMP

    dökümün belirttiği saat diliminde datetimeoffset, belirtmiyorsa UTC

    TIMESTAMP bir andır. Dökümler değeri yazdıkları saat dilimini belirtir (mysqldump UTC yazar); bu bilgi yoksa değerler UTC olarak okunur ve rapor bunu belirtir.

    Rapor satırı: timestamp_zone_assumed

  • ENUM

    değerlerini denetleyen bir CHECK ile nvarchar

    CHECK ile metin aynı değerleri korur.

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

    CHECK'in izin verdiği boş değer

    MySQL, esnek bir SQL modunda bir ENUM'a geçersiz bir değer girildiğinde boş bir dize saklar. Bu satırlar korunur ve CHECK onlara izin verir.

    Rapor satırı: enum_invalid_value

  • ENUM holding values outside its list

    CHECK yok

    Listede adı geçmeyen değerler CHECK'ten geçemez; bu yüzden CHECK oluşturulmaz.

    Rapor satırı: enum_check_skipped

  • SET

    MySQL'in yazdığı şekliyle nvarchar ('a,b')

    SQL Server'da dizi yoktur; metin MySQL'in döndürdüğü metindir.

  • JSON

    nvarchar(max)

    SQL Server'ın JSON fonksiyonları JSON'u metinden okur. Bir ISJSON denetimi, SQL Server 2022 öncesinde MySQL'in koruduğu 1 veya "x" gibi skaler değerleri reddederdi.

  • NUL bytes in text

    korunur

    nvarchar bir NUL karakteri tutabilir, bu yüzden değer olduğu gibi kopyalanır.

  • text that isn't valid in its character set

    hatalı baytlar yerine koyma karakteri olarak

    Metnin nvarchar olarak yazılabilmesi için karakter olarak okunması gerekir.

    Rapor satırı: invalid_utf8_replaced

  • text decoded twice (ñ)

    olduğu gibi kopyalanır

    Döküm tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.

    Rapor satırı: mojibake_suspected

  • AUTO_INCREMENT

    sayacı kopyalanan id'lerin ötesine ayarlanmış IDENTITY

    Kopyalanan id'ler IDENTITY_INSERT ile yüklenir ve sayaç, en yüksek id'den veya dökümün AUTO_INCREMENT değerinden (hangisi büyükse) sonra devam eder.

  • MyISAM AUTO_INCREMENT on the second column of a key

    tablo için tek sayaç

    MyISAM, anahtarın ilk sütununun her grubu için ayrı sayar; SQL Server'da tablo başına tek sayaç vardır.

    Rapor satırı: myisam_group_autoincrement

  • ON UPDATE CURRENT_TIMESTAMP

    bir AFTER UPDATE tetikleyicisi

    Tetikleyici, bir güncelleme sütunu ayarlamadığında sütunu geçerli zamana ayarlar. Birincil anahtar üzerinden birleştirir, bu yüzden tablonun bir birincil anahtarı olmalıdır.

    Rapor satırı: on_update_trigger

  • ON UPDATE CURRENT_TIMESTAMP on a table without a primary key

    taşınmaz

    Tetikleyici güncellenen satırları birincil anahtarlarıyla bulur; birincil anahtar yoksa bulamaz.

    Rapor satırı: on_update_without_key

  • generated columns

    hesaplanan sütunlar, kaynak onları saklıyorsa PERSISTED

    SQL Server bunları aynı iki şekilde hesaplar.

  • generated columns with functions SQL Server lacks

    düz bir sütun

    SQL Server için yazılamayan bir formül, düz bir sütun ve bir rapor satırı bırakır.

    Rapor satırı: generated_not_translated

  • INVISIBLE columns

    normal sütunlar

    SQL Server'da görünmez sütunlar yoktur.

    Rapor satırı: invisible_column

  • CHECK constraints

    çevrilir, CREATE TABLE içinde satır içi

    Satır içi CHECK kısıtları her satır yüklenirken test edilir.

  • CHECK constraints with functions SQL Server lacks

    oluşturulmaz

    SQL Server için yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.

    Rapor satırı: check_skipped

  • CHECK ... NOT ENFORCED

    oluşturulmaz

    MySQL bu CHECK kısıtlarını uygulamadan tutar, bu yüzden satırlar onları ihlal edebilir.

    Rapor satırı: check_not_enforced

  • defaults with functions SQL Server lacks

    varsayılan değer yok

    SQL Server için yazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır.

    Rapor satırı: default_not_translated

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

    sütunun tamamı üzerinde bir indeks

    SQL Server sütunların tamamını indeksler; bir önekte benzersiz olan anahtar sütunun tamamında da benzersizdir, bu yüzden her satır yüklenir.

    Rapor satırı: prefix_whole_column

  • FULLTEXT indexes

    oluşturulmaz

    SQL Server'ın tam metin araması bir katalog ve kendi sorgularını gerektirir.

    Rapor satırı: fulltext_not_created

  • SPATIAL indexes

    oluşturulmaz

    Bir geometri sütunu üzerindeki uzamsal indeks, dökümün belirtmediği bir sınırlayıcı kutu gerektirir.

    Rapor satırı: spatial_index_not_created

  • functional indexes, and indexes on columns of unlimited length

    oluşturulmaz

    SQL Server ne ifadeleri ne de nvarchar(max) ve varbinary(max) sütunlarını indeksler.

    Rapor satırı: index_skipped

  • foreign keys

    veriden sonra WITH NOCHECK, ardından yetim satırlar için uyarıyla denetlenir

    Dökümler FOREIGN_KEY_CHECKS=0 ile yüklenir ve MyISAM hiç denetlemez, bu yüzden üst satırı olmayan satırlar yaygındır. Anahtar önce oluşturulur ve en son denetlenir; yetim satırlar varsa yüklemeyi durdurmak yerine anahtar bir uyarıyla denetlenmemiş kalır.

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

    NO ACTION

    SQL Server bir tabloya iki kez ulaşabilecek zincirleme işlemleri reddeder; MySQL bunlara izin verir.

    Rapor satırı: foreign_key_action_dropped

  • foreign keys to columns without a unique key

    oluşturulmaz

    SQL Server, başvurulan sütunlarda bir birincil anahtar veya NULL içermeyen benzersiz bir indeks ister; InnoDB istemez.

    Rapor satırı: foreign_key_skipped

  • table and column names

    yazıldığı gibi; yalnızca büyük/küçük harfle ayrıldıklarında yeniden adlandırılır

    SQL Server adları olağan harmanlamada büyük/küçük harf ayırmaz.

    Rapor satırı: identifier_renamed

  • names over 116 characters

    kısaltılır

    SQL Server adları 128 karakter tutar; bunların bir kısmı adları birbirinden ayıran numaralar içindir.

    Rapor satırı: name_shortened

  • GEOMETRY, POINT, POLYGON...

    her değerin SRID'siyle geometry

    SQL Server'ın kendi geometry türü her şekli ve uzamsal referans sistemini korur.

  • INET4, INET6, UUID (MariaDB)

    nvarchar(39), uniqueidentifier

    uniqueidentifier, SQL Server'ın UUID türüdür; adresler metin olarak korunur.

  • BINARY, VARBINARY, BLOB

    binary, varbinary, varbinary(max)

    Baytlar bayt olarak kalır.

  • PARTITION BY

    tek tablo

    Satırlar aynıdır; gerekiyorsa tabloyu SQL Server'da yeniden bölümleyin.

    Rapor satırı: partitions_dropped

  • WITH SYSTEM VERSIONING (MariaDB)

    mevcut satırları içeren bir tablo

    Döküm yalnızca mevcut satırları içerir.

    Rapor satırı: system_versioning_dropped

  • MyISAM, MEMORY and other engines

    normal bir tablo

    SQL Server'ın tek bir tablo motoru vardır.

    Rapor satırı: engine_dropped

  • views, triggers, procedures, functions and events

    raporda listelenir

    Kodları MySQL'in dilinde yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.

    Rapor satırı: not_converted_objects

  • dumps without CREATE TABLE

    değerlerden okunan türler

    --no-create-info ile alınan bir dökümde yalnızca satırlar vardır, bu yüzden türler değerlerden gelir.

    Rapor satırı: no_schema

  • geometries in a dump without CREATE TABLE

    geometry

    MySQL'in geometri biçimi değerlerden tanınır.

  • _ci collations

    veritabanının harmanlaması, genellikle büyük/küçük harf duyarsız

    SQL Server, MySQL'in _ci harmanlamaları gibi, olağan harmanlamasında metni büyük/küçük harf ayırmadan karşılaştırır.

  • SET NAMES utf8 from utf8mb4 tables

    dönüştürülür, uyarıyla

    MySQL 5.x mysqldump varsayılan olarak 3 baytlık utf8 yazar ve herhangi bir dönüştürücü dosyayı görmeden önce her emojiyi soru işaretiyle değiştirir.

    Rapor satırı: dump_lost_four_byte_chars

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

    Latin-1 (Windows-1252) olarak okunur

    MySQL'in latin1 kodlaması Windows-1252'dir; bu tür dökümlerin olağan kodlamasıdır.

    Rapor satırı: charset_guessed

  • sjis, cp932, gbk, big5 dumps

    uyarıyla UTF-8 olarak okunur

    Bu kodlamalar henüz çözülmüyor.

    Rapor satırı: unsupported_charset

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

    hesaplanır

    Bazı döküm araçları değerleri bu çağrılar olarak yazar; bunlar ürettikleri değerler olarak okunur, coğrafi WKT'de boylam başa alınır.

  • other expressions in rows

    NULL

    Veritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz.

    Rapor satırı: expression_value

  • DEFAULT in VALUES

    sütunun varsayılan değeri

    Sabit bir varsayılan değer satıra kopyalanır.

    Rapor satırı: default_keyword_filled

  • DEFAULT in VALUES without a literal default

    NULL

    Kopyalanacak bir değer yok.

    Rapor satırı: default_keyword_null

  • REPLACE and INSERT IGNORE

    düz satırlar

    Bir dökümde her anahtar için bir satır vardır, bu yüzden satırlar aynıdır.

    Rapor satırı: replace_as_insert

  • types IntoSQL doesn't know

    nvarchar(max)

    Metin her değeri tutar; yüklemeden sonra türü değiştirin.

    Rapor satırı: unknown_type

  • values that don't fit their column

    NULL

    Hasarlı veya elle yazılmış bir döküm, sütununun tutamayacağı değerler içerebilir; geri kalanın yüklenmesi için bunlar NULL olur.

    Rapor satırı: invalid_value_null

  • unreadable geometries

    NULL

    Geometri olmayan baytlar geometri olarak saklanamaz.

    Rapor satırı: bad_geometry

  • CREATE SEQUENCE (MariaDB)

    sonraki değeriyle CREATE SEQUENCE ... AS bigint

    SQL Server'da aynı seçeneklere sahip sequence'lar vardır; her biri dökümün bıraktığı yerden devam eder.

  • VECTOR(n) (MariaDB 11.7+)

    float'ları JSON dizisi olarak tutan nvarchar(max)

    Yalnızca SQL Server 2025'te vektör türü vardır; bir JSON dizisi her sürümde her float'ı korur.

    Rapor satırı: type_replaced

MySQL içindeSQL Server içindeRapor satırı
TINYINT(1), BOOLher değer 0 veya 1 ise bit, değilse smallintMySQL'in BOOL türü, -128 ile 127 arasında herhangi bir sayıyı tutabilen bir TINYINT(1)'dir. Yalnızca 0 ve 1 tutan bir sütun bit olur; 2 veya -1 tutan bir sütun sayı olarak kalır, böylece hiçbir değerin anlamı değişmez.bool_kept_numeric
UNSIGNED integersTINYINT UNSIGNED tinyint olarak; diğerleri negatif olmadığını denetleyen bir CHECK ile bir sonraki geniş tam sayı, BIGINT UNSIGNED her değer sığıyorsa bigint, değilse decimal(38,0)SQL Server'da 0 ile 255 arasındaki tinyint dışında işaretsiz tam sayı yoktur. Daha geniş bir tür tüm işaretsiz aralığı tutar ve CHECK, MySQL'deki gibi negatif değerleri dışarıda tutar.unsigned_widened
ZEROFILL and display widthskaldırılırSıfır dolgusu bir sayının gösterilme biçimidir, sayının parçası değildir. Sayılar korunur; dolgu önemliyse okurken biçimlendirin.zerofill_dropped
FLOAT(M,D)ölçek olmadan real veya floatSQL Server'da kayan noktalı sayıların sabit ölçeği yoktur. Saklanan değerler olduğu gibi kopyalanır.float_scale_dropped
DECIMAL(p,s)38 basamağa kadar decimal(p,s); ötesi nvarcharSQL Server'ın decimal türü 38 basamak tutar. Daha geniş ondalıklar her basamak tam kalsın diye metin olarak korunur.decimal_as_text
BIT(1), BIT(n)bit; 63 bite kadar bigint; BIT(64) için decimal(20,0)Tek bir bit evet veya hayırdır; daha geniş bit alanları bitlerinin oluşturduğu sayı olarak saklanır.
zero, partial or impossible dates (0000-00-00, 2024-02-30)NULLSQL Server yalnızca gerçek takvim tarihlerini saklar. MySQL, SQL modu izin verdiğinde sıfır ve imkansız tarihleri tutar; bunlar NULL olur ve rapor bunları sayar.invalid_date_null
NOT NULL columns with values that become NULLNOT NULL kaldırılırDeğerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur.not_null_relaxed
DEFAULT '0000-00-00'varsayılan değer yokSQL Server'ın saklayamadığı bir varsayılan değer, uydurma bir tarihle değiştirilmek yerine dışarıda bırakılır.zero_date_default
TIMEher değer bir gün içindeyse time, değilse nvarcharMySQL'in TIME türü -838:59:59 ile 838:59:59 arasında bir süredir; SQL Server'ın time türü günün saatidir. Daha uzun veya negatif değerleri olan bir sütun onları metin olarak korur.time_as_interval
YEARaralığını denetleyen bir CHECK ile smallintSQL Server'da yıl türü yoktur; CHECK, MySQL'in izin verdiği değerlerin aynısını korur.
CHAR(n), VARCHAR(n)nvarchar(n)nvarchar desteklenen her sürümde her karakteri tutar ve MySQL CHAR değerlerini sondaki boşluklar olmadan döndürür, nvarchar da onları öyle korur.
text with characters past U+FFFF (emoji) in VARCHAR(n)nvarchar(2n), 4000'i aşınca nvarchar(max)nvarchar UTF-16 birimlerini sayar ve bir emoji iki birim tutar; bu yüzden sütuna her değer için yer verilir.text_length_widened
DATETIMEdatetime2DATETIME, datetime2 gibi saat dilimi olmayan bir duvar saati okumasıdır.
TIMESTAMPdökümün belirttiği saat diliminde datetimeoffset, belirtmiyorsa UTCTIMESTAMP bir andır. Dökümler değeri yazdıkları saat dilimini belirtir (mysqldump UTC yazar); bu bilgi yoksa değerler UTC olarak okunur ve rapor bunu belirtir.timestamp_zone_assumed
ENUMdeğerlerini denetleyen bir CHECK ile nvarcharCHECK ile metin aynı değerleri korur.
ENUM holding '' (MySQL's error value)CHECK'in izin verdiği boş değerMySQL, esnek bir SQL modunda bir ENUM'a geçersiz bir değer girildiğinde boş bir dize saklar. Bu satırlar korunur ve CHECK onlara izin verir.enum_invalid_value
ENUM holding values outside its listCHECK yokListede adı geçmeyen değerler CHECK'ten geçemez; bu yüzden CHECK oluşturulmaz.enum_check_skipped
SETMySQL'in yazdığı şekliyle nvarchar ('a,b')SQL Server'da dizi yoktur; metin MySQL'in döndürdüğü metindir.
JSONnvarchar(max)SQL Server'ın JSON fonksiyonları JSON'u metinden okur. Bir ISJSON denetimi, SQL Server 2022 öncesinde MySQL'in koruduğu 1 veya "x" gibi skaler değerleri reddederdi.
NUL bytes in textkorunurnvarchar bir NUL karakteri tutabilir, bu yüzden değer olduğu gibi kopyalanır.
text that isn't valid in its character sethatalı baytlar yerine koyma karakteri olarakMetnin nvarchar olarak yazılabilmesi için karakter olarak okunması gerekir.invalid_utf8_replaced
text decoded twice (ñ)olduğu gibi kopyalanırDöküm tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.mojibake_suspected
AUTO_INCREMENTsayacı kopyalanan id'lerin ötesine ayarlanmış IDENTITYKopyalanan id'ler IDENTITY_INSERT ile yüklenir ve sayaç, en yüksek id'den veya dökümün AUTO_INCREMENT değerinden (hangisi büyükse) sonra devam eder.
MyISAM AUTO_INCREMENT on the second column of a keytablo için tek sayaçMyISAM, anahtarın ilk sütununun her grubu için ayrı sayar; SQL Server'da tablo başına tek sayaç vardır.myisam_group_autoincrement
ON UPDATE CURRENT_TIMESTAMPbir AFTER UPDATE tetikleyicisiTetikleyici, bir güncelleme sütunu ayarlamadığında sütunu geçerli zamana ayarlar. Birincil anahtar üzerinden birleştirir, bu yüzden tablonun bir birincil anahtarı olmalıdır.on_update_trigger
ON UPDATE CURRENT_TIMESTAMP on a table without a primary keytaşınmazTetikleyici güncellenen satırları birincil anahtarlarıyla bulur; birincil anahtar yoksa bulamaz.on_update_without_key
generated columnshesaplanan sütunlar, kaynak onları saklıyorsa PERSISTEDSQL Server bunları aynı iki şekilde hesaplar.
generated columns with functions SQL Server lacksdüz bir sütunSQL Server için yazılamayan bir formül, düz bir sütun ve bir rapor satırı bırakır.generated_not_translated
INVISIBLE columnsnormal sütunlarSQL Server'da görünmez sütunlar yoktur.invisible_column
CHECK constraintsçevrilir, CREATE TABLE içinde satır içiSatır içi CHECK kısıtları her satır yüklenirken test edilir.
CHECK constraints with functions SQL Server lacksoluşturulmazSQL Server için yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.check_skipped
CHECK ... NOT ENFORCEDoluşturulmazMySQL bu CHECK kısıtlarını uygulamadan tutar, bu yüzden satırlar onları ihlal edebilir.check_not_enforced
defaults with functions SQL Server lacksvarsayılan değer yokSQL Server için yazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır.default_not_translated
keys and indexes on a prefix, c(20)sütunun tamamı üzerinde bir indeksSQL Server sütunların tamamını indeksler; bir önekte benzersiz olan anahtar sütunun tamamında da benzersizdir, bu yüzden her satır yüklenir.prefix_whole_column
FULLTEXT indexesoluşturulmazSQL Server'ın tam metin araması bir katalog ve kendi sorgularını gerektirir.fulltext_not_created
SPATIAL indexesoluşturulmazBir geometri sütunu üzerindeki uzamsal indeks, dökümün belirtmediği bir sınırlayıcı kutu gerektirir.spatial_index_not_created
functional indexes, and indexes on columns of unlimited lengtholuşturulmazSQL Server ne ifadeleri ne de nvarchar(max) ve varbinary(max) sütunlarını indeksler.index_skipped
foreign keysveriden sonra WITH NOCHECK, ardından yetim satırlar için uyarıyla denetlenirDökümler FOREIGN_KEY_CHECKS=0 ile yüklenir ve MyISAM hiç denetlemez, bu yüzden üst satırı olmayan satırlar yaygındır. Anahtar önce oluşturulur ve en son denetlenir; yetim satırlar varsa yüklemeyi durdurmak yerine anahtar bir uyarıyla denetlenmemiş kalır.
ON DELETE or ON UPDATE that cascades in a cycle or along a second pathNO ACTIONSQL Server bir tabloya iki kez ulaşabilecek zincirleme işlemleri reddeder; MySQL bunlara izin verir.foreign_key_action_dropped
foreign keys to columns without a unique keyoluşturulmazSQL Server, başvurulan sütunlarda bir birincil anahtar veya NULL içermeyen benzersiz bir indeks ister; InnoDB istemez.foreign_key_skipped
table and column namesyazıldığı gibi; yalnızca büyük/küçük harfle ayrıldıklarında yeniden adlandırılırSQL Server adları olağan harmanlamada büyük/küçük harf ayırmaz.identifier_renamed
names over 116 characterskısaltılırSQL Server adları 128 karakter tutar; bunların bir kısmı adları birbirinden ayıran numaralar içindir.name_shortened
GEOMETRY, POINT, POLYGON...her değerin SRID'siyle geometrySQL Server'ın kendi geometry türü her şekli ve uzamsal referans sistemini korur.
INET4, INET6, UUID (MariaDB)nvarchar(39), uniqueidentifieruniqueidentifier, SQL Server'ın UUID türüdür; adresler metin olarak korunur.
BINARY, VARBINARY, BLOBbinary, varbinary, varbinary(max)Baytlar bayt olarak kalır.
PARTITION BYtek tabloSatırlar aynıdır; gerekiyorsa tabloyu SQL Server'da yeniden bölümleyin.partitions_dropped
WITH SYSTEM VERSIONING (MariaDB)mevcut satırları içeren bir tabloDöküm yalnızca mevcut satırları içerir.system_versioning_dropped
MyISAM, MEMORY and other enginesnormal bir tabloSQL Server'ın tek bir tablo motoru vardır.engine_dropped
views, triggers, procedures, functions and eventsraporda listelenirKodları MySQL'in dilinde yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.not_converted_objects
dumps without CREATE TABLEdeğerlerden okunan türler--no-create-info ile alınan bir dökümde yalnızca satırlar vardır, bu yüzden türler değerlerden gelir.no_schema
geometries in a dump without CREATE TABLEgeometryMySQL'in geometri biçimi değerlerden tanınır.
_ci collationsveritabanının harmanlaması, genellikle büyük/küçük harf duyarsızSQL Server, MySQL'in _ci harmanlamaları gibi, olağan harmanlamasında metni büyük/küçük harf ayırmadan karşılaştırır.
SET NAMES utf8 from utf8mb4 tablesdönüştürülür, uyarıylaMySQL 5.x mysqldump varsayılan olarak 3 baytlık utf8 yazar ve herhangi bir dönüştürücü dosyayı görmeden önce her emojiyi soru işaretiyle değiştirir.dump_lost_four_byte_chars
dumps without SET NAMES whose text isn't UTF-8Latin-1 (Windows-1252) olarak okunurMySQL'in latin1 kodlaması Windows-1252'dir; bu tür dökümlerin olağan kodlamasıdır.charset_guessed
sjis, cp932, gbk, big5 dumpsuyarıyla UTF-8 olarak okunurBu kodlamalar henüz çözülmüyor.unsupported_charset
UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rowshesaplanırBazı döküm araçları değerleri bu çağrılar olarak yazar; bunlar ürettikleri değerler olarak okunur, coğrafi WKT'de boylam başa alınır.
other expressions in rowsNULLVeritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz.expression_value
DEFAULT in VALUESsütunun varsayılan değeriSabit bir varsayılan değer satıra kopyalanır.default_keyword_filled
DEFAULT in VALUES without a literal defaultNULLKopyalanacak bir değer yok.default_keyword_null
REPLACE and INSERT IGNOREdüz satırlarBir dökümde her anahtar için bir satır vardır, bu yüzden satırlar aynıdır.replace_as_insert
types IntoSQL doesn't knownvarchar(max)Metin her değeri tutar; yüklemeden sonra türü değiştirin.unknown_type
values that don't fit their columnNULLHasarlı veya elle yazılmış bir döküm, sütununun tutamayacağı değerler içerebilir; geri kalanın yüklenmesi için bunlar NULL olur.invalid_value_null
unreadable geometriesNULLGeometri olmayan baytlar geometri olarak saklanamaz.bad_geometry
CREATE SEQUENCE (MariaDB)sonraki değeriyle CREATE SEQUENCE ... AS bigintSQL Server'da aynı seçeneklere sahip sequence'lar vardır; her biri dökümün bıraktığı yerden devam eder.
VECTOR(n) (MariaDB 11.7+)float'ları JSON dizisi olarak tutan nvarchar(max)Yalnızca SQL Server 2025'te vektör türü vardır; bir JSON dizisi her sürümde her float'ı korur.type_replaced

Betiği SQL Server veritabanına yükleyin

Betik tabloları oluşturur, satırları kopyalar, ardından anahtarları, indeksleri ve yabancı anahtarları ekler; böylece hızlı yüklenir ve ilk hatada durur.

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

Yabancı anahtarlar WITH NOCHECK ile eklenir ve ardından denetlenir. Bir satır var olmayan bir satıra işaret ediyorsa betik, yarı yolda başarısız olmak yerine hangi kısıt olduğunu söyler ve onu denetlenmemiş bırakır.

Büyük bir döküm için sqlcmd'yi sunucuyla aynı makinede çalıştırın. En fazla 1000 satırlık her toplu iş kendi başına işlenir; böylece işlem günlüğü küçük kalır.

En iyi sonuç için MySQL dökümü nasıl alınır

Dönüştürücü, dökümün içerdiğini okur. Bu seçenekler verilerinizin daha fazlasını dökümde tutar:

  • --default-character-set=utf8mb4 emoji ve diğer 4 baytlık karakterleri korur; utf8 dökümü bunları dönüştürücü görmeden önce kaybeder.
  • --hex-blob ikili sütunları onaltılık olarak yazar; bu biçim sistemler arasında kopyalamada bozulmaz.
  • --routines --triggers --events bu nesneleri döküme ekler; böylece rapor onları listeleyebilir.

Neler dönüştürülmez

Görünümler, tetikleyiciler, saklı yordamlar, fonksiyonlar ve olaylar her veritabanının kendi dilinde yazılır. Raporda adlarıyla listelenirler, asla sessizce atlanmazlar; böylece onları SQL Server için yeniden yazabilirsiniz.

MySQL - SQL Server dönüştürme hakkında sorular

Yanıtınızı bulamadınız mı? İletişim sayfasından bize yazın, bir kişi yanıt verir. İletişim sayfası

Dökümüm yükleniyor mu?

Hayır. Dönüştürücü tarayıcınızda çalışır ve dökümü diskinizden parça parça okur; böylece döküm bilgisayarınızdan hiç çıkmaz. Masaüstü uygulaması ve komut satırı da bilgisayarınızda dönüştürür.

Döküm ne kadar büyük olabilir?

Dönüştürücü dökümün tamamını asla bellekte tutmaz: dosyayı aralıklar halinde iki kez okur ve betiği ilerledikçe yazar. Birkaç gigabaytlık dökümler tarayıcıda, masaüstü uygulamasında ve komut satırıyla dönüştürülür.

MariaDB dökümlerini okuyor mu?

Evet. mariadb-dump ile alınan dökümler ve MariaDB 10.3 ile 12 arası sürümlerin dökümleri, MariaDB'nin INET6, INET4 ve UUID sütunları dahil, aynı şekilde dönüştürülür.

0000-00-00 tarihlerine ne olur?

SQL Server içinde sıfır tarih yoktur; bu yüzden bunlar NULL olur ve sütun NULL kabul eder. Rapor her sütunda kaç tane olduğunu söyler.

AUTO_INCREMENT değerleri korunuyor mu?

Evet. Her AUTO_INCREMENT sütunu bir IDENTITY sütunu olur, her satır kendi id'sini korur ve sonraki id en yüksek id'den sonra devam eder; tablonun AUTO_INCREMENT değeri daha yüksekse ondan sonra.

TINYINT(1) boolean olur mu?

Yalnızca sütundaki her değer 0 veya 1 ise bit olur. 2 veya -1 gibi başka sayılar içeriyorsa sayı olarak kalır ve rapor nedenini söyler; böylece hiçbir değer yanlışlıkla 1 olmaz.

Saklı yordamlar ve tetikleyiciler ne olur?

Raporda adlarıyla listelenirler ve dönüştürülmezler, çünkü her veritabanı onları kendi dilinde yazar. ON UPDATE CURRENT_TIMESTAMP istisnadır: bir SQL Server tetikleyicisine dönüşür.

Betik hangi SQL Server sürümlerinde yüklenir?

SQL Server 2017 ile 2025 arası. Aynı betik her birinde yüklenir ve bir sorun çıkarsa ilk hatada durur.