SQL Server omzetten naar MariaDB
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 MariaDB-script met dezelfde tabellen, sleutels, indexen en data. Elke waarde die MariaDB niet ongewijzigd kan bevatten, en elk object dat het niet overneemt, staat in het rapport.
18 rijen geconverteerd, 3 correcties, geen afgewezen
Tabellen in shop_2024_sqlserver.sqlSQL Server-dump · geschreven door SQL Server Management Objects · utf-8
orders10 rijen1
11 kolommen id int not null customer_id int not null status varchar(10) not null total decimal(19,4) not null items tinyint unsigned not null ordered_at datetime not null shipped_at datetime(6) note text details text order_ref uuid not null total_with_tax decimal(12,2) customers8 rijen2
8 kolommen id int not null name varchar(100) not null email varchar(200) not null country char(2) not null is_active tinyint(1) not null signed_up date created_at datetime not null row_version blob
Niet geconverteerd
- Weergave paid_orders
- Trigger orders_no_negative
Elke database schrijft deze in een eigen taal. Herschrijf ze voor MariaDB.
-- Written by IntoSQL from a SQL Server dump. Load it with: mariadb --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` uuid NOT NULL DEFAULT (uuid()),
`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
- "shipped_at" van orders is datetime2(7), met meer cijfers van een seconde dan MariaDB bewaart, dus het is datetime(6) en de laatste cijfers worden afgekapt.
- "created_at" van customers bevat momenten met een tijdzone; MariaDB heeft geen type dat die bewaart, dus ze worden in UTC opgeslagen als datetime.
- "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; MariaDB 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 MariaDB.
- De check check1 op orders kan niet voor MariaDB 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 MariaDB 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.
Je bestand wordt op deze computer omgezet en nooit geüpload.
Andere voorbeelden:
Wat er verandert van SQL Server naar MariaDB
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 MariaDB 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.
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
MariaDB 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 MariaDB 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
MariaDB 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, een longtext met een JSON-check
Dezelfde JSON-waarden, die de JSON-functies van MariaDB lezen.
uniqueidentifier
uuid
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
MariaDB 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
MariaDB telt één kolom per tabel, aan het begin van een sleutel; elke andere behoudt zijn waarden zonder teller.
Rapportregel: counter_dropped
CREATE SEQUENCE
CREATE SEQUENCE met dezelfde opties
Sequences in MariaDB werken op dezelfde manier. SSMS neemt niet op in het script hoe ver een sequence is, dus hij begint waar hij is aangemaakt.
computed columns
gegenereerde kolommen, STORED bij PERSISTED, anders VIRTUAL
MariaDB berekent ze op dezelfde twee manieren, met CONCAT zo geschreven dat NULL als leeg telt, zoals in SQL Server.
computed columns with functions MariaDB 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 MariaDB 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
Dezelfde checks, getest terwijl elke rij laadt.
CHECK constraints with functions MariaDB 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 MariaDB als dat nodig is.
Rapportregel: partitions_dropped
temporal tables (SYSTEM_VERSIONING)
WITH SYSTEM VERSIONING, beginnend bij de huidige rijen; de geschiedenistabel als gewone tabel
MariaDB houdt de geschiedenis voortaan zelf bij; de periodekolommen en de geschiedenistabel van SQL Server worden gekopieerd zoals ze waren.
schemas
één database, tabellen met de naam van hun schema ervoor
Schema's in MariaDB 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 Server | In MariaDB | Rapportregel |
|---|---|---|
| bit | tinyint(1)BOOLEAN in MariaDB 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-typenText behoudt elk teken als utf8mb4. Een kolom in een sleutel is hooguit varchar(768), het langste wat een sleutel bevat. | |
| 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 afgekaptMariaDB bewaart microseconden; het zevende cijfer (100 nanoseconden) wordt afgekapt, nooit afgerond, dus geen waarde schuift naar de volgende seconde of dag. | fraction_cut |
| datetimeoffset | datetime(p) in UTCTIMESTAMP in MariaDB reikt maar tot 2038, dus momenten worden opgeslagen als datetime in UTC: hetzelfde moment, welke offset elke waarde ook had. | moments_as_utc |
| time | time(p)Dezelfde tijdstippen van de dag. | |
| dates before the year 1000 | NULLMariaDB 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) | json, een longtext met een JSON-checkDezelfde JSON-waarden, die de JSON-functies van MariaDB lezen. | |
| uniqueidentifier | uuidDezelfde identifiers, in kleine letters geschreven. | |
| binary, varbinary, image | binary(n), varbinary(n) en blob-typenBytes blijven bytes. | |
| geometry, geography | blob 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, timestamp | blob, leegSQL Server stelt een rijversie zelf in en SSMS neemt er geen waarden voor op in het script. | rowversion_empty |
| xml, sql_variant, hierarchyid, vector | longtextMariaDB 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 |
| IDENTITY | AUTO_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 key | geheel getal zonder tellerMariaDB telt één kolom per tabel, aan het begin van een sleutel; elke andere behoudt zijn waarden zonder teller. | counter_dropped |
| CREATE SEQUENCE | CREATE SEQUENCE met dezelfde optiesSequences in MariaDB werken op dezelfde manier. SSMS neemt niet op in het script hoe ver een sequence is, dus hij begint waar hij is aangemaakt. | |
| computed columns | gegenereerde kolommen, STORED bij PERSISTED, anders VIRTUALMariaDB berekent ze op dezelfde twee manieren, met CONCAT zo geschreven dat NULL als leeg telt, zoals in SQL Server. | |
| computed columns with functions MariaDB lacks | een 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 MariaDB lacks, and NEXT VALUE FOR | geen standaardwaardeEen standaardwaarde die niet kan worden geschreven, wordt weggelaten en gemeld. | default_not_translated |
| CHECK constraints | vertaaldDezelfde checks, getest terwijl elke rij laadt. | |
| CHECK constraints with functions MariaDB lacks | niet aangemaaktEen check die niet kan worden geschreven, wordt weggelaten en gemeld. | check_skipped |
| CHECK constraints added WITH NOCHECK or disabled | niet aangemaaktSQL Server past deze checks niet toe, dus de rijen kunnen ze schenden. | check_not_enforced |
| filtered and columnstore indexes | niet aangemaaktIntoSQL schrijft b-tree-indexen op hele kolommen; maak de andere na het laden opnieuw aan. | index_skipped |
| foreign keys | refererende 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 create | niet 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 MariaDB als dat nodig is. | partitions_dropped |
| temporal tables (SYSTEM_VERSIONING) | WITH SYSTEM VERSIONING, beginnend bij de huidige rijen; de geschiedenistabel als gewone tabelMariaDB houdt de geschiedenis voortaan zelf bij; de periodekolommen en de geschiedenistabel van SQL Server worden gekopieerd zoals ze waren. | |
| schemas | één database, tabellen met de naam van hun schema ervoorSchema's in MariaDB 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 NULL | NOT 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 functions | vermeld 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 values | NULLEen converter die geen database draait, kan ze niet evalueren. | expression_value |
| types IntoSQL doesn't know | longtextTekst kan elke waarde bevatten; wijzig het type na het laden. | unknown_type |
| NUL characters in text | behoudenDe waarde wordt gekopieerd, met het NUL-teken ge-escapet. | |
| text that isn't valid in its encoding | de 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 MariaDB 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.
mariadb --default-character-set=utf8mb4 mydb < sql_server.mariadb.sqlRefererende sleutels worden aangemaakt zoals de dump ze declareert, met FOREIGN_KEY_CHECKS=0 terwijl de rijen laden, zoals mysqldump doet.
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 MariaDB 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 MariaDB.
Vragen over SQL Server naar MariaDB
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 MariaDB-sequences met dezelfde opties.
Wat gebeurt er met money, datetimeoffset en andere SQL Server-typen?
bit wordt tinyint(1), money decimal(19,4), uniqueidentifier UUID en datetimeoffset datetime in UTC. Temporele tabellen behouden hun systeemversiebeheer. 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 MariaDB-versies laadt het script?
MariaDB 10.11 en later. Elk testscript laadt op 10.11 en 11.4 en stopt bij de eerste fout als er iets misgaat.