Naar de inhoud
IntoSQL-startpagina

SQL Server omzetten naar MySQL

Zet het script neer dat Generate Scripts van SSMS met schema en data schrijft, als .sql of .sql.gz, UTF-16 of UTF-8, en download een MySQL-script met dezelfde tabellen, sleutels, indexen en data. Elke waarde die MySQL niet ongewijzigd kan bevatten, en elk object dat het niet overneemt, staat in het rapport.

Je bestand
sqlshop_2024_sqlserver.sqlVoorbeeldbestand, 11 kB
Je database

18 rijen geconverteerd, 3 correcties, geen afgewezen

Tonen

Tabellen in shop_2024_sqlserver.sqlSQL Server-dump · geschreven door SQL Server Management Objects · utf-8

  • orders10 rijen1
    11 kolommen
    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 rijen2
    8 kolommen
    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

Niet geconverteerd

  • Weergave paid_orders
  • Trigger orders_no_negative

Elke database schrijft deze in een eigen taal. Herschrijf ze voor 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;

Correcties

  1. "shipped_at" van orders is datetime2(7), met meer cijfers van een seconde dan MySQL bewaart, dus het is datetime(6) en de laatste cijfers worden afgekapt.
  2. "created_at" van customers bevat momenten met een tijdzone; MySQL heeft geen type dat die bewaart, dus ze worden in UTC opgeslagen als datetime.
  3. "row_version" van customers is een rijversie die SQL Server zelf instelt; de dump heeft er geen waarden voor, dus het is blob en leeg.

Na te kijken

  • 6 tekstkolommen vergelijken in de bron zonder op hoofdletters te letten; MySQL vergelijkt exact, dus unieke sleutels en zoekopdrachten kunnen anders werken. Gebruik een collation of kolomtype dat hoofdletters negeert voor de kolommen die dat nodig hebben.
  • 2 weergaven, triggers, routines of gebeurtenissen zijn niet geconverteerd; het rapport noemt ze allemaal. Maak ze met de hand opnieuw aan in MySQL.
  • De check check1 op orders kan niet voor MySQL worden geschreven (function isjson), dus hij wordt niet aangemaakt. Schrijf de check met de hand als hij ertoe doet.
  • De index idx_orders_pending op orders gebruikt een expressie die niet voor MySQL kan worden geschreven (neither MySQL 5.7 nor MariaDB index an expression), dus hij wordt niet aangemaakt. Maak de index met de hand aan als query's hem nodig hebben.
  • De standaardwaarde van "order_ref" in orders kan niet voor MySQL worden geschreven (a default expression needs MySQL 8.0.13), dus de kolom heeft geen standaardwaarde. Voeg de standaardwaarde met de hand toe als nieuwe rijen die nodig hebben.

Je bestand wordt op deze computer omgezet en nooit geüpload.

Andere voorbeelden:

Wat er verandert van SQL Server naar MySQL

Elke rij is een regel die de converter toepast, met de rapportregel die hij schrijft als de regel iets in je data verandert.

  • bit

    tinyint(1)

    BOOLEAN in MySQL is TINYINT(1): 1 en 0, zoals bit ze bevat.

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

    char(n), varchar(n) tot 1024 tekens, daarboven text-typen

    Text behoudt elk teken als utf8mb4. Een kolom in een sleutel is hooguit varchar(768), het langste wat een sleutel bevat, en dat geldt ook voor tekst met een standaardwaarde, die MySQL 5.7 alleen aan varchar geeft.

  • decimal(p,s), money, smallmoney

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

    decimal bevat 65 cijfers, meer dan de 38 van SQL Server, dus elke waarde is exact.

  • datetime, datetime2, smalldatetime

    datetime(p)

    Een datetime is in beide een kloktijd.

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

    zes cijfers van een seconde, het zevende afgekapt

    MySQL bewaart microseconden; het zevende cijfer (100 nanoseconden) wordt afgekapt, nooit afgerond, dus geen waarde schuift naar de volgende seconde of dag.

    Rapportregel: fraction_cut

  • datetimeoffset

    datetime(p) in UTC

    TIMESTAMP in MySQL reikt maar tot 2038, dus momenten worden opgeslagen als datetime in UTC: hetzelfde moment, welke offset elke waarde ook had.

    Rapportregel: moments_as_utc

  • time

    time(p)

    Dezelfde tijdstippen van de dag.

  • dates before the year 1000

    NULL

    MySQL slaat jaren 1000 tot en met 9999 op, en SQL Server gaat terug tot het jaar 1. Die waarden worden NULL en het rapport telt ze.

    Rapportregel: date_out_of_range

  • json (SQL Server 2025)

    json

    Dezelfde JSON-waarden, die de JSON-functies van MySQL lezen.

  • uniqueidentifier

    char(36)

    Dezelfde identifiers, in kleine letters geschreven.

  • binary, varbinary, image

    binary(n), varbinary(n) en blob-typen

    Bytes blijven bytes.

  • geometry, geography

    blob met de eigen bytes van SQL Server

    SSMS schrijft ruimtelijke waarden in de serialisatie van SQL Server, die byte voor byte behouden blijft.

    Rapportregel: spatial_as_native

  • rowversion, timestamp

    blob, leeg

    SQL Server stelt een rijversie zelf in en SSMS neemt er geen waarden voor op in het script.

    Rapportregel: rowversion_empty

  • xml, sql_variant, hierarchyid, vector

    longtext

    MySQL heeft geen gelijkwaardig type; xml en sql_variant behouden de tekst van elke waarde en hierarchyid zijn pad, zoals /1/2/.

    Rapportregel: type_replaced

  • collations that ignore case (_CI_)

    exacte vergelijking (utf8mb4_bin)

    Tabellen gebruiken utf8mb4_bin, zodat unieke sleutels gescheiden houden wat SQL Server gescheiden hield; kolommen die hoofdletters negeerden, verliezen dat. Accentregels verschillen per versie, dus geen _ci-collatie komt op elke versie overeen met die van SQL Server.

    Rapportregel: case_insensitive_collation

  • IDENTITY

    AUTO_INCREMENT, verdergaand na het hoogste id

    De kolom vooraan in de primaire sleutel telt; de teller gaat verder na het hoogste id.

  • IDENTITY columns that don't lead the primary key

    geheel getal zonder teller

    MySQL telt één kolom per tabel, aan het begin van een sleutel; elke andere behoudt zijn waarden zonder teller.

    Rapportregel: counter_dropped

  • CREATE SEQUENCE

    niet aangemaakt

    MySQL heeft geen sequences. De waarden die een sequence uitgaf, staan in de rijen.

    Rapportregel: sequence_not_converted

  • computed columns

    gegenereerde kolommen, STORED bij PERSISTED, anders VIRTUAL

    MySQL berekent ze op dezelfde twee manieren, met CONCAT zo geschreven dat NULL als leeg telt, zoals in SQL Server.

  • computed columns with functions MySQL lacks

    een gewone kolom

    Een formule die niet kan worden geschreven, levert een gewone kolom en een regel in het rapport op; SSMS neemt geen waarden voor berekende kolommen op in het script.

    Rapportregel: generated_not_translated

  • defaults with functions MySQL lacks, and NEXT VALUE FOR

    geen standaardwaarde

    Een standaardwaarde die niet kan worden geschreven, wordt weggelaten en gemeld.

    Rapportregel: default_not_translated

  • CHECK constraints

    vertaald

    MySQL 5.7 bewaart ze zonder te controleren; de andere testen ze terwijl elke rij laadt.

  • CHECK constraints with functions MySQL lacks

    niet aangemaakt

    Een check die niet kan worden geschreven, wordt weggelaten en gemeld.

    Rapportregel: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    niet aangemaakt

    SQL Server past deze checks niet toe, dus de rijen kunnen ze schenden.

    Rapportregel: check_not_enforced

  • filtered and columnstore indexes

    niet aangemaakt

    IntoSQL schrijft b-tree-indexen op hele kolommen; maak de andere na het laden opnieuw aan.

    Rapportregel: index_skipped

  • foreign keys

    refererende sleutels, geladen met FOREIGN_KEY_CHECKS=0

    De rijen laden in willekeurige volgorde, en de sleutels controleren daarna nieuwe rijen.

  • foreign keys to tables the dump doesn't create

    niet aangemaakt

    Een sleutel kan niet verwijzen naar een tabel die er niet is.

    Rapportregel: foreign_key_skipped

  • tables on a partition scheme

    één tabel met de rijen van elke partitie

    De rijen zijn dezelfde; partitioneer de tabel opnieuw in MySQL als dat nodig is.

    Rapportregel: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    twee tabellen: de huidige rijen en de geschiedenis

    De tabel en zijn geschiedenistabel worden als gewone tabellen gekopieerd; MySQL houdt de geschiedenis niet zelf bij.

    Rapportregel: system_versioning_dropped

  • schemas

    één database, tabellen met de naam van hun schema ervoor

    Schema's in MySQL zijn databases, die een script dat in één database laadt niet kan aanmaken; tabellen in dbo behouden hun naam.

    Rapportregel: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL weggelaten

    Een kolom waarvan waarden NULL moesten worden, kan NOT NULL niet houden, anders zou het laden stoppen.

    Rapportregel: not_null_relaxed

  • views, functions, procedures, triggers, synonyms, types and partition functions

    vermeld in het rapport

    Hun code is geschreven in T-SQL, dus ze worden vermeld zodat je ze opnieuw kunt maken.

    Rapportregel: not_converted_objects

  • scripts without CREATE TABLE (data only)

    typen afgeleid uit de waarden

    Een script met alleen data bevat alleen rijen, dus de typen komen uit de waarden.

    Rapportregel: no_schema

  • expressions in INSERT values

    NULL

    Een converter die geen database draait, kan ze niet evalueren.

    Rapportregel: expression_value

  • types IntoSQL doesn't know

    longtext

    Tekst kan elke waarde bevatten; wijzig het type na het laden.

    Rapportregel: unknown_type

  • NUL characters in text

    behouden

    De waarde wordt gekopieerd, met het NUL-teken ge-escapet.

  • text that isn't valid in its encoding

    de foute bytes als het vervangingsteken

    Het script is UTF-8 en elke waarde moet geldige tekst zijn.

    Rapportregel: invalid_utf8_replaced

  • text decoded twice (ñ)

    ongewijzigd gekopieerd

    Het script bevat precies deze tekens, dus ze worden gekopieerd; het rapport wijst ze aan.

    Rapportregel: mojibake_suspected

In SQL ServerIn MySQLRapportregel
bittinyint(1)BOOLEAN in MySQL is TINYINT(1): 1 en 0, zoals bit ze bevat.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), textchar(n), varchar(n) tot 1024 tekens, daarboven text-typenText behoudt elk teken als utf8mb4. Een kolom in een sleutel is hooguit varchar(768), het langste wat een sleutel bevat, en dat geldt ook voor tekst met een standaardwaarde, die MySQL 5.7 alleen aan varchar geeft.
decimal(p,s), money, smallmoneydecimal(p,s); money als decimal(19,4)decimal bevat 65 cijfers, meer dan de 38 van SQL Server, dus elke waarde is exact.
datetime, datetime2, smalldatetimedatetime(p)Een datetime is in beide een kloktijd.
datetime2(7), time(7) and datetimeoffset(7)zes cijfers van een seconde, het zevende afgekaptMySQL bewaart microseconden; het zevende cijfer (100 nanoseconden) wordt afgekapt, nooit afgerond, dus geen waarde schuift naar de volgende seconde of dag.fraction_cut
datetimeoffsetdatetime(p) in UTCTIMESTAMP in MySQL reikt maar tot 2038, dus momenten worden opgeslagen als datetime in UTC: hetzelfde moment, welke offset elke waarde ook had.moments_as_utc
timetime(p)Dezelfde tijdstippen van de dag.
dates before the year 1000NULLMySQL slaat jaren 1000 tot en met 9999 op, en SQL Server gaat terug tot het jaar 1. Die waarden worden NULL en het rapport telt ze.date_out_of_range
json (SQL Server 2025)jsonDezelfde JSON-waarden, die de JSON-functies van MySQL lezen.
uniqueidentifierchar(36)Dezelfde identifiers, in kleine letters geschreven.
binary, varbinary, imagebinary(n), varbinary(n) en blob-typenBytes blijven bytes.
geometry, geographyblob met de eigen bytes van SQL ServerSSMS schrijft ruimtelijke waarden in de serialisatie van SQL Server, die byte voor byte behouden blijft.spatial_as_native
rowversion, timestampblob, leegSQL Server stelt een rijversie zelf in en SSMS neemt er geen waarden voor op in het script.rowversion_empty
xml, sql_variant, hierarchyid, vectorlongtextMySQL heeft geen gelijkwaardig type; xml en sql_variant behouden de tekst van elke waarde en hierarchyid zijn pad, zoals /1/2/.type_replaced
collations that ignore case (_CI_)exacte vergelijking (utf8mb4_bin)Tabellen gebruiken utf8mb4_bin, zodat unieke sleutels gescheiden houden wat SQL Server gescheiden hield; kolommen die hoofdletters negeerden, verliezen dat. Accentregels verschillen per versie, dus geen _ci-collatie komt op elke versie overeen met die van SQL Server.case_insensitive_collation
IDENTITYAUTO_INCREMENT, verdergaand na het hoogste idDe kolom vooraan in de primaire sleutel telt; de teller gaat verder na het hoogste id.
IDENTITY columns that don't lead the primary keygeheel getal zonder tellerMySQL telt één kolom per tabel, aan het begin van een sleutel; elke andere behoudt zijn waarden zonder teller.counter_dropped
CREATE SEQUENCEniet aangemaaktMySQL heeft geen sequences. De waarden die een sequence uitgaf, staan in de rijen.sequence_not_converted
computed columnsgegenereerde kolommen, STORED bij PERSISTED, anders VIRTUALMySQL berekent ze op dezelfde twee manieren, met CONCAT zo geschreven dat NULL als leeg telt, zoals in SQL Server.
computed columns with functions MySQL lackseen gewone kolomEen formule die niet kan worden geschreven, levert een gewone kolom en een regel in het rapport op; SSMS neemt geen waarden voor berekende kolommen op in het script.generated_not_translated
defaults with functions MySQL lacks, and NEXT VALUE FORgeen standaardwaardeEen standaardwaarde die niet kan worden geschreven, wordt weggelaten en gemeld.default_not_translated
CHECK constraintsvertaaldMySQL 5.7 bewaart ze zonder te controleren; de andere testen ze terwijl elke rij laadt.
CHECK constraints with functions MySQL lacksniet aangemaaktEen check die niet kan worden geschreven, wordt weggelaten en gemeld.check_skipped
CHECK constraints added WITH NOCHECK or disabledniet aangemaaktSQL Server past deze checks niet toe, dus de rijen kunnen ze schenden.check_not_enforced
filtered and columnstore indexesniet aangemaaktIntoSQL schrijft b-tree-indexen op hele kolommen; maak de andere na het laden opnieuw aan.index_skipped
foreign keysrefererende sleutels, geladen met FOREIGN_KEY_CHECKS=0De rijen laden in willekeurige volgorde, en de sleutels controleren daarna nieuwe rijen.
foreign keys to tables the dump doesn't createniet aangemaaktEen sleutel kan niet verwijzen naar een tabel die er niet is.foreign_key_skipped
tables on a partition schemeéén tabel met de rijen van elke partitieDe rijen zijn dezelfde; partitioneer de tabel opnieuw in MySQL als dat nodig is.partitions_dropped
temporal tables (SYSTEM_VERSIONING)twee tabellen: de huidige rijen en de geschiedenisDe tabel en zijn geschiedenistabel worden als gewone tabellen gekopieerd; MySQL houdt de geschiedenis niet zelf bij.system_versioning_dropped
schemaséén database, tabellen met de naam van hun schema ervoorSchema's in MySQL zijn databases, die een script dat in één database laadt niet kan aanmaken; tabellen in dbo behouden hun naam.schemas_merged
NOT NULL columns with values that become NULLNOT NULL weggelatenEen kolom waarvan waarden NULL moesten worden, kan NOT NULL niet houden, anders zou het laden stoppen.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionsvermeld in het rapportHun code is geschreven in T-SQL, dus ze worden vermeld zodat je ze opnieuw kunt maken.not_converted_objects
scripts without CREATE TABLE (data only)typen afgeleid uit de waardenEen script met alleen data bevat alleen rijen, dus de typen komen uit de waarden.no_schema
expressions in INSERT valuesNULLEen converter die geen database draait, kan ze niet evalueren.expression_value
types IntoSQL doesn't knowlongtextTekst kan elke waarde bevatten; wijzig het type na het laden.unknown_type
NUL characters in textbehoudenDe waarde wordt gekopieerd, met het NUL-teken ge-escapet.
text that isn't valid in its encodingde foute bytes als het vervangingstekenHet script is UTF-8 en elke waarde moet geldige tekst zijn.invalid_utf8_replaced
text decoded twice (ñ)ongewijzigd gekopieerdHet script bevat precies deze tekens, dus ze worden gekopieerd; het rapport wijst ze aan.mojibake_suspected

Het script in MySQL laden

Het script maakt de tabellen aan, kopieert de rijen en voegt daarna sleutels, indexen en refererende sleutels toe, zodat het snel laadt en bij de eerste fout stopt.

mysql --default-character-set=utf8mb4 mydb < sql_server.mysql.sql

Refererende sleutels worden aangemaakt zoals de dump ze declareert, met FOREIGN_KEY_CHECKS=0 terwijl de rijen laden, zodat een rij die naar een ontbrekende rij verwijst het laden niet stopt.

Voer bij een grote dump de client uit op dezelfde machine als de server, en verhoog max_allowed_packet als één rij erg groot is.

IntoSQL Pro laadt het bestand rechtstreeks in MySQL vanuit de desktopapp of de opdrachtregel, zonder een script te schrijven.

Een dump van SQL Server maken voor het beste resultaat

De converter leest wat de dump bevat. Met deze opties blijft er meer van je data in staan:

  • Klik in SSMS met rechts op de database, kies Tasks, Generate Scripts en selecteer de tabellen. dbatools, mssql-scripter en andere tools op basis van dezelfde bibliotheek schrijven hetzelfde script.
  • Zet onder Advanced Types of data to script op Schema and data. Een script van alleen het schema bevat tabellen zonder rijen.
  • Sla het op als Unicode, de standaard van SSMS, of als UTF-8: beide worden op dezelfde manier gelezen, en gzip werkt ook.

Wat niet wordt geconverteerd

Weergaven, functies, procedures, triggers, synoniemen, regels en beveiligingsbeleid zijn geschreven in T-SQL. Ze staan op naam in het rapport en worden nooit stilletjes weggelaten, zodat je ze kunt herschrijven voor MySQL.

Vragen over SQL Server naar MySQL

Staat je vraag er niet bij? Schrijf ons via de contactpagina en een mens antwoordt. Contactpagina

Wordt mijn dump geüpload?

Nee. De converter draait in je browser en leest de dump in delen van je schijf, dus hij verlaat je computer nooit. De desktopapp en de opdrachtregel converteren ook op je computer.

Hoe groot mag de dump zijn?

De converter houdt nooit de hele dump in het geheugen: hij leest het bestand twee keer, in bereiken, en schrijft het script gaandeweg. Dumps van meerdere gigabytes worden geconverteerd in de browser, in de desktopapp en met de opdrachtregel.

Leest het het UTF-16-bestand dat SSMS opslaat?

Ja. SSMS slaat scripts standaard op als UTF-16, en de converter leest UTF-16 en UTF-8 even goed, met of zonder gzip, met GO tussen batches.

Van welke SQL Server-versies kan het script komen?

Scripts die SSMS, dbatools of mssql-scripter schrijven vanaf SQL Server 2017. Elk testscript komt van SQL Server 2017, 2022 en 2025 en wordt cel voor cel met zijn bron vergeleken.

Blijven IDENTITY-waarden behouden?

Ja, voor één kolom per tabel: de IDENTITY-kolom vooraan in de primaire sleutel wordt AUTO_INCREMENT en gaat verder na het hoogste id. Sequences worden niet aangemaakt, omdat MySQL ze niet heeft, en het rapport vermeldt dat.

Wat gebeurt er met money, datetimeoffset en andere SQL Server-typen?

bit wordt tinyint(1), money decimal(19,4), uniqueidentifier char(36) en datetimeoffset datetime in UTC. Schema's worden voorvoegsels van tabelnamen in één database. Kolommen die hoofdletters negeerden, vergelijken exact, en het rapport zegt welke.

En procedures, triggers en weergaven?

Ze staan op naam in het rapport en worden niet geconverteerd, omdat elke database ze in een eigen taal schrijft.

Op welke MySQL-versies laadt het script?

MySQL 5.7 en later. Elk testscript laadt op 5.7 en 9 en stopt bij de eerste fout als er iets misgaat.