Aller au contenu
Accueil IntoSQL

Convertir SQL Server en MariaDB

Déposez le script que Generate Scripts de SSMS écrit avec le schéma et les données, en .sql ou .sql.gz, UTF-16 ou UTF-8, et téléchargez un script MariaDB avec les mêmes tables, clés, index et données. Chaque valeur que MariaDB ne peut pas contenir telle quelle, et chaque objet qu'il ne reprend pas, est listé dans le rapport.

Votre fichier
sqlshop_2024_sqlserver.sqlFichier d'exemple, 11 ko
Votre base de données

18 lignes converties, 3 corrections, aucune rejetée

Afficher

Tables de shop_2024_sqlserver.sqlDump SQL Server · écrit par SQL Server Management Objects · utf-8

  • orders10 lignes1
    11 colonnes
    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_refuuid not null
    total_with_taxdecimal(12,2)
  • customers8 lignes2
    8 colonnes
    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

Non converti

  • Vue paid_orders
  • Déclencheur orders_no_negative

Chaque base de données les écrit dans son propre langage. Réécrivez-les pour 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;

Corrections

  1. "shipped_at" de orders est datetime2(7), avec plus de chiffres de seconde que MariaDB n'en garde ; elle est donc en datetime(6) et les derniers chiffres sont coupés.
  2. "created_at" de customers contient des instants avec fuseau horaire ; MariaDB n'a aucun type qui le garde, ils sont donc stockés en UTC en datetime.
  3. "row_version" de customers est une version de ligne que SQL Server définit lui-même ; le dump n'a aucune valeur pour elle, elle est donc en blob et vide.

À vérifier

  • 6 colonnes de texte comparent sans tenir compte de la casse dans la source ; MariaDB compare exactement, donc les clés uniques et les recherches peuvent se comporter autrement. Utilisez une collation ou un type de colonne insensible à la casse sur les colonnes qui en ont besoin.
  • 2 objets non convertis (vues, déclencheurs, routines ou événements) ; le rapport les liste un par un. Recréez-les à la main dans MariaDB.
  • La contrainte CHECK check1 sur orders ne peut pas être écrite pour MariaDB (function isjson) ; elle n'est donc pas créée. Écrivez la contrainte à la main si elle compte.
  • L'index idx_orders_pending sur orders utilise une expression qui ne peut pas être écrite pour MariaDB (neither MySQL 5.7 nor MariaDB index an expression) ; il n'est donc pas créé. Créez l'index à la main si les requêtes en ont besoin.

Votre fichier est converti sur cet ordinateur et n'est jamais envoyé.

Autres exemples :

Ce qui change de SQL Server à MariaDB

Chaque ligne est une règle appliquée par le convertisseur, avec la ligne de rapport qu'il écrit quand la règle change quelque chose dans vos données.

  • bit

    tinyint(1)

    Le BOOLEAN de MariaDB est un TINYINT(1) : 1 et 0, comme bit les contient.

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

    char(n), varchar(n) jusqu'à 1024 caractères, types text au-delà

    Le texte garde chaque caractère en utf8mb4. Une colonne dans une clé est au plus varchar(768), le maximum qu'une clé accepte.

  • decimal(p,s), money, smallmoney

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

    decimal contient 65 chiffres, plus que les 38 de SQL Server, donc chaque valeur est exacte.

  • datetime, datetime2, smalldatetime

    datetime(p)

    Un datetime est une date et une heure locales dans les deux.

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

    six chiffres de seconde, le septième coupé

    MariaDB garde les microsecondes ; le septième chiffre (100 nanosecondes) est coupé, jamais arrondi, donc aucune valeur ne passe à la seconde ou au jour suivant.

    Ligne du rapport: fraction_cut

  • datetimeoffset

    datetime(p) en UTC

    Le TIMESTAMP de MariaDB s'arrête en 2038 ; les instants sont donc stockés en datetime en UTC, le même instant quel que soit le décalage de chaque valeur.

    Ligne du rapport: moments_as_utc

  • time

    time(p)

    Les mêmes heures du jour.

  • dates before the year 1000

    NULL

    MariaDB stocke les années 1000 à 9999, et SQL Server remonte jusqu'à l'an 1. Ces valeurs deviennent NULL et le rapport les compte.

    Ligne du rapport: date_out_of_range

  • json (SQL Server 2025)

    json, un longtext avec un CHECK JSON

    Les mêmes valeurs JSON, que lisent les fonctions JSON de MariaDB.

  • uniqueidentifier

    uuid

    Les mêmes identifiants, écrits en minuscules.

  • binary, varbinary, image

    binary(n), varbinary(n) et types blob

    Les octets restent des octets.

  • geometry, geography

    blob avec les octets propres à SQL Server

    SSMS écrit les valeurs spatiales dans la sérialisation de SQL Server, qui est gardée octet par octet.

    Ligne du rapport: spatial_as_native

  • rowversion, timestamp

    blob, sans valeurs

    SQL Server définit lui-même la version de ligne et SSMS n'écrit aucune valeur pour elle dans le script.

    Ligne du rapport: rowversion_empty

  • xml, sql_variant, hierarchyid, vector

    longtext

    MariaDB n'a pas de type équivalent ; xml et sql_variant gardent le texte de chaque valeur et hierarchyid son chemin, comme /1/2/.

    Ligne du rapport: type_replaced

  • collations that ignore case (_CI_)

    comparaison exacte (utf8mb4_bin)

    Les tables utilisent utf8mb4_bin pour que les clés uniques distinguent ce que SQL Server distinguait ; les colonnes insensibles à la casse perdent cette propriété. Les règles d'accents changent selon les versions, donc aucune collation _ci ne correspond à celle de SQL Server sur toutes.

    Ligne du rapport: case_insensitive_collation

  • IDENTITY

    AUTO_INCREMENT, qui reprend après l'identifiant le plus élevé

    La première colonne de la clé primaire compte ; le compteur reprend après l'identifiant le plus élevé.

  • IDENTITY columns that don't lead the primary key

    un entier simple

    MariaDB compte une colonne par table, en tête d'une clé ; toute autre garde ses valeurs sans compteur.

    Ligne du rapport: counter_dropped

  • CREATE SEQUENCE

    CREATE SEQUENCE avec les mêmes options

    Les séquences MariaDB fonctionnent de la même façon. SSMS n'écrit pas où en est une séquence, elle repart donc de sa valeur de création.

  • computed columns

    colonnes générées, STORED si PERSISTED, VIRTUAL sinon

    MariaDB les calcule des deux mêmes façons, avec CONCAT écrit pour que NULL compte comme vide, comme dans SQL Server.

  • computed columns with functions MariaDB lacks

    une colonne simple

    Une formule qui ne peut pas être écrite laisse une colonne simple et une ligne dans le rapport ; SSMS n'écrit aucune valeur pour les colonnes calculées.

    Ligne du rapport: generated_not_translated

  • defaults with functions MariaDB lacks, and NEXT VALUE FOR

    aucune valeur par défaut

    Une valeur par défaut qui ne peut pas être écrite est omise et signalée.

    Ligne du rapport: default_not_translated

  • CHECK constraints

    traduites

    Les mêmes contraintes CHECK, vérifiées au chargement de chaque ligne.

  • CHECK constraints with functions MariaDB lacks

    non créée

    Une contrainte CHECK qui ne peut pas être écrite est omise et signalée.

    Ligne du rapport: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    non créée

    SQL Server n'applique pas ces contraintes CHECK, donc les lignes peuvent les enfreindre.

    Ligne du rapport: check_not_enforced

  • filtered and columnstore indexes

    non créée

    IntoSQL écrit des index b-tree sur des colonnes entières ; recréez les autres après le chargement.

    Ligne du rapport: index_skipped

  • foreign keys

    clés étrangères, chargées avec FOREIGN_KEY_CHECKS=0

    Les lignes se chargent dans tout ordre, puis les clés vérifient les nouvelles lignes.

  • foreign keys to tables the dump doesn't create

    non créée

    Une clé ne peut pas désigner une table absente.

    Ligne du rapport: foreign_key_skipped

  • tables on a partition scheme

    une seule table avec les lignes de chaque partition

    Les lignes sont les mêmes ; partitionnez à nouveau la table dans MariaDB si besoin.

    Ligne du rapport: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    WITH SYSTEM VERSIONING, à partir des lignes actuelles ; la table d'historique comme table simple

    MariaDB garde désormais l'historique de lui-même ; les colonnes de période et la table d'historique de SQL Server sont copiées telles quelles.

  • schemas

    une seule base de données, tables préfixées par le nom de leur schéma

    Les schémas de MariaDB sont des bases de données, qu'un script chargé dans une seule base ne peut pas créer ; les tables de dbo gardent leur nom.

    Ligne du rapport: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL retiré

    Une colonne dont des valeurs ont dû devenir NULL ne peut pas garder NOT NULL, sinon le chargement s'arrêterait.

    Ligne du rapport: not_null_relaxed

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

    listés dans le rapport

    Leur code est écrit en T-SQL ; ils sont donc listés pour que vous les recréiez.

    Ligne du rapport: not_converted_objects

  • scripts without CREATE TABLE (data only)

    types déduits des valeurs

    Un script de données seules ne contient que des lignes, donc les types viennent des valeurs.

    Ligne du rapport: no_schema

  • expressions in INSERT values

    NULL

    Un convertisseur qui n'exécute pas de base de données ne peut pas les évaluer.

    Ligne du rapport: expression_value

  • types IntoSQL doesn't know

    longtext

    Le texte contient n'importe quelle valeur ; changez le type après le chargement.

    Ligne du rapport: unknown_type

  • NUL characters in text

    conservé

    La valeur est copiée avec le caractère NUL échappé.

  • text that isn't valid in its encoding

    les octets invalides deviennent le caractère de remplacement

    Le script est en UTF-8 et chaque valeur doit être du texte valide.

    Ligne du rapport: invalid_utf8_replaced

  • text decoded twice (ñ)

    copié tel quel

    Le script contient exactement ces caractères, ils sont donc copiés ; le rapport les signale.

    Ligne du rapport: mojibake_suspected

Dans SQL ServerDans MariaDBLigne du rapport
bittinyint(1)Le BOOLEAN de MariaDB est un TINYINT(1) : 1 et 0, comme bit les contient.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), textchar(n), varchar(n) jusqu'à 1024 caractères, types text au-delàLe texte garde chaque caractère en utf8mb4. Une colonne dans une clé est au plus varchar(768), le maximum qu'une clé accepte.
decimal(p,s), money, smallmoneydecimal(p,s) ; money en decimal(19,4)decimal contient 65 chiffres, plus que les 38 de SQL Server, donc chaque valeur est exacte.
datetime, datetime2, smalldatetimedatetime(p)Un datetime est une date et une heure locales dans les deux.
datetime2(7), time(7) and datetimeoffset(7)six chiffres de seconde, le septième coupéMariaDB garde les microsecondes ; le septième chiffre (100 nanosecondes) est coupé, jamais arrondi, donc aucune valeur ne passe à la seconde ou au jour suivant.fraction_cut
datetimeoffsetdatetime(p) en UTCLe TIMESTAMP de MariaDB s'arrête en 2038 ; les instants sont donc stockés en datetime en UTC, le même instant quel que soit le décalage de chaque valeur.moments_as_utc
timetime(p)Les mêmes heures du jour.
dates before the year 1000NULLMariaDB stocke les années 1000 à 9999, et SQL Server remonte jusqu'à l'an 1. Ces valeurs deviennent NULL et le rapport les compte.date_out_of_range
json (SQL Server 2025)json, un longtext avec un CHECK JSONLes mêmes valeurs JSON, que lisent les fonctions JSON de MariaDB.
uniqueidentifieruuidLes mêmes identifiants, écrits en minuscules.
binary, varbinary, imagebinary(n), varbinary(n) et types blobLes octets restent des octets.
geometry, geographyblob avec les octets propres à SQL ServerSSMS écrit les valeurs spatiales dans la sérialisation de SQL Server, qui est gardée octet par octet.spatial_as_native
rowversion, timestampblob, sans valeursSQL Server définit lui-même la version de ligne et SSMS n'écrit aucune valeur pour elle dans le script.rowversion_empty
xml, sql_variant, hierarchyid, vectorlongtextMariaDB n'a pas de type équivalent ; xml et sql_variant gardent le texte de chaque valeur et hierarchyid son chemin, comme /1/2/.type_replaced
collations that ignore case (_CI_)comparaison exacte (utf8mb4_bin)Les tables utilisent utf8mb4_bin pour que les clés uniques distinguent ce que SQL Server distinguait ; les colonnes insensibles à la casse perdent cette propriété. Les règles d'accents changent selon les versions, donc aucune collation _ci ne correspond à celle de SQL Server sur toutes.case_insensitive_collation
IDENTITYAUTO_INCREMENT, qui reprend après l'identifiant le plus élevéLa première colonne de la clé primaire compte ; le compteur reprend après l'identifiant le plus élevé.
IDENTITY columns that don't lead the primary keyun entier simpleMariaDB compte une colonne par table, en tête d'une clé ; toute autre garde ses valeurs sans compteur.counter_dropped
CREATE SEQUENCECREATE SEQUENCE avec les mêmes optionsLes séquences MariaDB fonctionnent de la même façon. SSMS n'écrit pas où en est une séquence, elle repart donc de sa valeur de création.
computed columnscolonnes générées, STORED si PERSISTED, VIRTUAL sinonMariaDB les calcule des deux mêmes façons, avec CONCAT écrit pour que NULL compte comme vide, comme dans SQL Server.
computed columns with functions MariaDB lacksune colonne simpleUne formule qui ne peut pas être écrite laisse une colonne simple et une ligne dans le rapport ; SSMS n'écrit aucune valeur pour les colonnes calculées.generated_not_translated
defaults with functions MariaDB lacks, and NEXT VALUE FORaucune valeur par défautUne valeur par défaut qui ne peut pas être écrite est omise et signalée.default_not_translated
CHECK constraintstraduitesLes mêmes contraintes CHECK, vérifiées au chargement de chaque ligne.
CHECK constraints with functions MariaDB lacksnon crééeUne contrainte CHECK qui ne peut pas être écrite est omise et signalée.check_skipped
CHECK constraints added WITH NOCHECK or disablednon crééeSQL Server n'applique pas ces contraintes CHECK, donc les lignes peuvent les enfreindre.check_not_enforced
filtered and columnstore indexesnon crééeIntoSQL écrit des index b-tree sur des colonnes entières ; recréez les autres après le chargement.index_skipped
foreign keysclés étrangères, chargées avec FOREIGN_KEY_CHECKS=0Les lignes se chargent dans tout ordre, puis les clés vérifient les nouvelles lignes.
foreign keys to tables the dump doesn't createnon crééeUne clé ne peut pas désigner une table absente.foreign_key_skipped
tables on a partition schemeune seule table avec les lignes de chaque partitionLes lignes sont les mêmes ; partitionnez à nouveau la table dans MariaDB si besoin.partitions_dropped
temporal tables (SYSTEM_VERSIONING)WITH SYSTEM VERSIONING, à partir des lignes actuelles ; la table d'historique comme table simpleMariaDB garde désormais l'historique de lui-même ; les colonnes de période et la table d'historique de SQL Server sont copiées telles quelles.
schemasune seule base de données, tables préfixées par le nom de leur schémaLes schémas de MariaDB sont des bases de données, qu'un script chargé dans une seule base ne peut pas créer ; les tables de dbo gardent leur nom.schemas_merged
NOT NULL columns with values that become NULLNOT NULL retiréUne colonne dont des valeurs ont dû devenir NULL ne peut pas garder NOT NULL, sinon le chargement s'arrêterait.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionslistés dans le rapportLeur code est écrit en T-SQL ; ils sont donc listés pour que vous les recréiez.not_converted_objects
scripts without CREATE TABLE (data only)types déduits des valeursUn script de données seules ne contient que des lignes, donc les types viennent des valeurs.no_schema
expressions in INSERT valuesNULLUn convertisseur qui n'exécute pas de base de données ne peut pas les évaluer.expression_value
types IntoSQL doesn't knowlongtextLe texte contient n'importe quelle valeur ; changez le type après le chargement.unknown_type
NUL characters in textconservéLa valeur est copiée avec le caractère NUL échappé.
text that isn't valid in its encodingles octets invalides deviennent le caractère de remplacementLe script est en UTF-8 et chaque valeur doit être du texte valide.invalid_utf8_replaced
text decoded twice (ñ)copié tel quelLe script contient exactement ces caractères, ils sont donc copiés ; le rapport les signale.mojibake_suspected

Charger le script dans MariaDB

Le script crée les tables, copie les lignes, puis ajoute les clés, les index et les clés étrangères ; il se charge donc vite et s'arrête à la première erreur.

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

Les clés étrangères sont créées comme le dump les déclare, avec FOREIGN_KEY_CHECKS=0 pendant le chargement des lignes, comme le fait mysqldump.

Pour un gros dump, exécutez le client sur la machine du serveur, et augmentez max_allowed_packet si une seule ligne est très grande.

IntoSQL Pro charge le fichier directement dans MariaDB depuis l'application de bureau ou la ligne de commande, sans écrire de script.

Faire le dump SQL Server pour un meilleur résultat

Le convertisseur lit ce que contient le dump. Ces options y gardent davantage de vos données :

  • Dans SSMS, faites un clic droit sur la base de données, Tasks, Generate Scripts, et choisissez les tables. dbatools, mssql-scripter et les autres outils construits sur la même bibliothèque écrivent le même script.
  • Sous Advanced, réglez Types of data to script sur Schema and data. Un script du schéma seul contient des tables sans lignes.
  • Enregistrez-le en Unicode, le format par défaut de SSMS, ou en UTF-8 : les deux se lisent de la même façon, et gzip fonctionne aussi.

Ce qui n'est pas converti

Les vues, fonctions, procédures, déclencheurs, synonymes, règles et politiques de sécurité sont écrits en T-SQL. Ils sont listés par nom dans le rapport, jamais supprimés en silence, pour que vous puissiez les réécrire pour MariaDB.

Questions sur SQL Server vers MariaDB

Pas de réponse ici ? Écrivez-nous depuis la page de contact, une personne vous répond. Page de contact

Mon dump est-il envoyé ?

Non. Le convertisseur s'exécute dans votre navigateur et lit le dump depuis votre disque par morceaux ; il ne quitte donc jamais votre ordinateur. L'application de bureau et la ligne de commande convertissent aussi sur votre ordinateur.

Quelle taille peut avoir le dump ?

Le convertisseur ne garde jamais tout le dump en mémoire : il lit le fichier deux fois, par plages, et écrit le script au fur et à mesure. Les dumps de plusieurs gigaoctets se convertissent dans le navigateur, dans l'application de bureau et avec la ligne de commande.

Lit-il le fichier UTF-16 qu'enregistre SSMS ?

Oui. SSMS enregistre les scripts en UTF-16 par défaut, et le convertisseur lit l'UTF-16 comme l'UTF-8, compressés en gzip ou non, avec GO entre les lots.

De quelles versions de SQL Server le script peut-il venir ?

Les scripts que SSMS, dbatools ou mssql-scripter écrivent depuis SQL Server 2017. Chaque script de test vient de SQL Server 2017, 2022 et 2025 et est comparé à sa source cellule par cellule.

Les valeurs IDENTITY sont-elles gardées ?

Oui, pour une colonne par table : la colonne IDENTITY en tête de la clé primaire devient AUTO_INCREMENT et reprend après l'identifiant le plus élevé. Les séquences deviennent des séquences MariaDB avec les mêmes options.

Que deviennent money, datetimeoffset et les autres types SQL Server ?

bit devient tinyint(1), money decimal(19,4), uniqueidentifier UUID, et datetimeoffset datetime en UTC. Les tables temporelles gardent le versionnage système. Les colonnes insensibles à la casse se comparent exactement, et le rapport indique lesquelles.

Et les procédures, les déclencheurs et les vues ?

Ils sont listés par nom dans le rapport et ne sont pas convertis, car chaque base de données les écrit dans son propre langage.

Sur quelles versions de MariaDB le script se charge-t-il ?

MariaDB 10.11 et versions ultérieures. Chaque script de test se charge sur 10.11 et 11.4, et s'arrête à la première erreur en cas de problème.