Saltar al contenido
Inicio de IntoSQL

Convierte SQL Server a MariaDB

Suelta el script que escribe Generate Scripts de SSMS con esquema y datos, en .sql o .sql.gz, UTF-16 o UTF-8, y descarga un script de MariaDB con las mismas tablas, claves, índices y datos. Cada valor que MariaDB no puede guardar tal cual, y cada objeto que no admite, aparece en el informe.

Tu archivo
sqlshop_2024_sqlserver.sqlArchivo de ejemplo, 11 kB
Tu base de datos

18 filas convertidas, 3 correcciones, ninguna rechazada

Mostrar

Tablas en shop_2024_sqlserver.sqlVolcado de SQL Server · escrito por SQL Server Management Objects · utf-8

  • orders10 filas1
    11 columnas
    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 filas2
    8 columnas
    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

Sin convertir

  • Vista paid_orders
  • Disparador orders_no_negative

Cada base de datos los escribe en su propio lenguaje. Reescríbelos para 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;

Correcciones

  1. "shipped_at" de orders es datetime2(7), con más dígitos de segundo de los que guarda MariaDB, así que es datetime(6) y se cortan los últimos dígitos.
  2. "created_at" de customers contiene instantes con zona horaria; MariaDB no tiene un tipo que la conserve, así que se guardan en UTC como datetime.
  3. "row_version" de customers es una versión de fila que SQL Server asigna por sí mismo; el volcado no tiene valores para ella, así que es blob y queda vacía.

Para revisar

  • 6 columnas de texto comparan sin distinguir mayúsculas en el origen; MariaDB compara exactamente, así que las claves únicas y las búsquedas pueden comportarse distinto. Usa una intercalación o un tipo de columna que no distinga mayúsculas en las columnas que lo necesiten.
  • 2 vistas, disparadores, rutinas o eventos no se convierten; el informe lista cada uno. Vuelve a crearlos a mano en MariaDB.
  • El CHECK check1 de orders no se puede escribir para MariaDB (function isjson), así que no se crea. Escribe el CHECK a mano si es importante.
  • El índice idx_orders_pending de orders usa una expresión que no se puede escribir para MariaDB (neither MySQL 5.7 nor MariaDB index an expression), así que no se crea. Crea el índice a mano si las consultas lo necesitan.

Tu archivo se convierte en esta computadora y nunca se sube.

Otros ejemplos:

Qué cambia de SQL Server a MariaDB

Cada fila es una regla que aplica el convertidor, con la línea que escribe en el informe cuando la regla cambia algo en tus datos.

  • bit

    tinyint(1)

    El BOOLEAN de MariaDB es TINYINT(1): 1 y 0, como los guarda bit.

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

    char(n), varchar(n) hasta 1024 caracteres, tipos text si son más

    El texto conserva cada carácter como utf8mb4. Una columna en una clave es varchar(768) como máximo, lo más largo que admite una clave.

  • decimal(p,s), money, smallmoney

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

    decimal admite 65 dígitos, más que los 38 de SQL Server, así que cada valor es exacto.

  • datetime, datetime2, smalldatetime

    datetime(p)

    Un datetime es una lectura de reloj en ambos.

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

    seis dígitos de segundo, el séptimo se corta

    MariaDB guarda microsegundos; el séptimo dígito (100 nanosegundos) se corta, nunca se redondea, así que ningún valor pasa al segundo o al día siguiente.

    Línea del informe: fraction_cut

  • datetimeoffset

    datetime(p) en UTC

    El TIMESTAMP de MariaDB solo llega a 2038, así que los instantes se guardan como datetime en UTC, el mismo instante sea cual sea el desfase que tenía cada valor.

    Línea del informe: moments_as_utc

  • time

    time(p)

    Las mismas horas del día.

  • dates before the year 1000

    NULL

    MariaDB guarda los años 1000 a 9999, y SQL Server llega hasta el año 1. Esos valores se vuelven NULL y el informe los cuenta.

    Línea del informe: date_out_of_range

  • json (SQL Server 2025)

    json, un longtext con un CHECK de JSON

    Los mismos valores JSON, que leen las funciones JSON de MariaDB.

  • uniqueidentifier

    uuid

    Los mismos identificadores, escritos en minúsculas.

  • binary, varbinary, image

    binary(n), varbinary(n) y tipos blob

    Los bytes siguen siendo bytes.

  • geometry, geography

    blob con los bytes propios de SQL Server

    SSMS escribe los valores espaciales en la serialización de SQL Server, que se conserva byte a byte.

    Línea del informe: spatial_as_native

  • rowversion, timestamp

    blob, sin valores

    SQL Server asigna la versión de fila por sí mismo y SSMS no escribe valores para ella en el script.

    Línea del informe: rowversion_empty

  • xml, sql_variant, hierarchyid, vector

    longtext

    MariaDB no tiene un tipo equivalente; xml y sql_variant conservan el texto de cada valor y hierarchyid su ruta, como /1/2/.

    Línea del informe: type_replaced

  • collations that ignore case (_CI_)

    comparación exacta (utf8mb4_bin)

    Las tablas usan utf8mb4_bin para que las claves únicas mantengan distinto lo que SQL Server mantenía distinto; las columnas que no distinguían mayúsculas pierden eso. Las reglas de acentos cambian entre versiones, así que ninguna intercalación _ci coincide con la de SQL Server en todas.

    Línea del informe: case_insensitive_collation

  • IDENTITY

    AUTO_INCREMENT, siguiendo después del id más alto

    Cuenta la columna que encabeza la clave primaria; el contador sigue después del id más alto.

  • IDENTITY columns that don't lead the primary key

    un entero simple

    MariaDB cuenta una columna por tabla, al inicio de una clave; cualquier otra conserva sus valores sin contador.

    Línea del informe: counter_dropped

  • CREATE SEQUENCE

    CREATE SEQUENCE con las mismas opciones

    Las secuencias de MariaDB funcionan de la misma forma. SSMS no escribe hasta dónde llegó una secuencia, así que empieza donde se creó.

  • computed columns

    columnas generadas, STORED cuando son PERSISTED, VIRTUAL en otro caso

    MariaDB las calcula de las mismas dos formas, con CONCAT escrito para que NULL cuente como vacío, como en SQL Server.

  • computed columns with functions MariaDB lacks

    una columna simple

    Una fórmula que no se puede escribir deja una columna simple y una línea en el informe; SSMS no escribe valores para las columnas calculadas.

    Línea del informe: generated_not_translated

  • defaults with functions MariaDB lacks, and NEXT VALUE FOR

    sin valor predeterminado

    Un valor predeterminado que no se puede escribir se deja fuera y aparece en el informe.

    Línea del informe: default_not_translated

  • CHECK constraints

    traducidos

    Los mismos CHECK, comprobados al cargar cada fila.

  • CHECK constraints with functions MariaDB lacks

    no se crea

    Un CHECK que no se puede escribir se deja fuera y aparece en el informe.

    Línea del informe: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    no se crea

    SQL Server no aplica estos CHECK, así que las filas pueden no cumplirlos.

    Línea del informe: check_not_enforced

  • filtered and columnstore indexes

    no se crea

    IntoSQL escribe índices b-tree sobre columnas completas; vuelve a crear los demás después de cargar.

    Línea del informe: index_skipped

  • foreign keys

    claves foráneas, cargadas con FOREIGN_KEY_CHECKS=0

    Las filas cargan en cualquier orden, y después las claves comprueban las filas nuevas.

  • foreign keys to tables the dump doesn't create

    no se crea

    Una clave no puede nombrar una tabla que no existe.

    Línea del informe: foreign_key_skipped

  • tables on a partition scheme

    una tabla con las filas de todas las particiones

    Las filas son las mismas; vuelve a particionar la tabla en MariaDB si lo necesita.

    Línea del informe: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    WITH SYSTEM VERSIONING, a partir de las filas actuales; la tabla de historial como tabla simple

    MariaDB conserva el historial por sí mismo de ahora en adelante; las columnas de periodo y la tabla de historial de SQL Server se copian como estaban.

  • schemas

    una base de datos, con el nombre del esquema delante de cada tabla

    Los esquemas de MariaDB son bases de datos, que un script cargado en una sola base de datos no puede crear; las tablas de dbo conservan sus nombres.

    Línea del informe: schemas_merged

  • NOT NULL columns with values that become NULL

    sin NOT NULL

    Una columna cuyos valores tuvieron que volverse NULL no puede conservar NOT NULL, o la carga se detendría.

    Línea del informe: not_null_relaxed

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

    listados en el informe

    Su código está escrito en T-SQL, así que se listan para que los vuelvas a crear.

    Línea del informe: not_converted_objects

  • scripts without CREATE TABLE (data only)

    tipos leídos de los valores

    Un script solo de datos solo tiene filas, así que los tipos salen de los valores.

    Línea del informe: no_schema

  • expressions in INSERT values

    NULL

    Un convertidor que no ejecuta una base de datos no puede evaluarlas.

    Línea del informe: expression_value

  • types IntoSQL doesn't know

    longtext

    El texto admite cualquier valor; cambia el tipo después de cargar.

    Línea del informe: unknown_type

  • NUL characters in text

    se conserva

    El valor se copia con el carácter NUL escapado.

  • text that isn't valid in its encoding

    los bytes incorrectos como carácter de reemplazo

    El script es UTF-8 y cada valor tiene que ser texto válido.

    Línea del informe: invalid_utf8_replaced

  • text decoded twice (ñ)

    se copia tal cual

    El script contiene exactamente estos caracteres, así que se copian; el informe los señala.

    Línea del informe: mojibake_suspected

En SQL ServerEn MariaDBLínea del informe
bittinyint(1)El BOOLEAN de MariaDB es TINYINT(1): 1 y 0, como los guarda bit.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), textchar(n), varchar(n) hasta 1024 caracteres, tipos text si son másEl texto conserva cada carácter como utf8mb4. Una columna en una clave es varchar(768) como máximo, lo más largo que admite una clave.
decimal(p,s), money, smallmoneydecimal(p,s); money como decimal(19,4)decimal admite 65 dígitos, más que los 38 de SQL Server, así que cada valor es exacto.
datetime, datetime2, smalldatetimedatetime(p)Un datetime es una lectura de reloj en ambos.
datetime2(7), time(7) and datetimeoffset(7)seis dígitos de segundo, el séptimo se cortaMariaDB guarda microsegundos; el séptimo dígito (100 nanosegundos) se corta, nunca se redondea, así que ningún valor pasa al segundo o al día siguiente.fraction_cut
datetimeoffsetdatetime(p) en UTCEl TIMESTAMP de MariaDB solo llega a 2038, así que los instantes se guardan como datetime en UTC, el mismo instante sea cual sea el desfase que tenía cada valor.moments_as_utc
timetime(p)Las mismas horas del día.
dates before the year 1000NULLMariaDB guarda los años 1000 a 9999, y SQL Server llega hasta el año 1. Esos valores se vuelven NULL y el informe los cuenta.date_out_of_range
json (SQL Server 2025)json, un longtext con un CHECK de JSONLos mismos valores JSON, que leen las funciones JSON de MariaDB.
uniqueidentifieruuidLos mismos identificadores, escritos en minúsculas.
binary, varbinary, imagebinary(n), varbinary(n) y tipos blobLos bytes siguen siendo bytes.
geometry, geographyblob con los bytes propios de SQL ServerSSMS escribe los valores espaciales en la serialización de SQL Server, que se conserva byte a byte.spatial_as_native
rowversion, timestampblob, sin valoresSQL Server asigna la versión de fila por sí mismo y SSMS no escribe valores para ella en el script.rowversion_empty
xml, sql_variant, hierarchyid, vectorlongtextMariaDB no tiene un tipo equivalente; xml y sql_variant conservan el texto de cada valor y hierarchyid su ruta, como /1/2/.type_replaced
collations that ignore case (_CI_)comparación exacta (utf8mb4_bin)Las tablas usan utf8mb4_bin para que las claves únicas mantengan distinto lo que SQL Server mantenía distinto; las columnas que no distinguían mayúsculas pierden eso. Las reglas de acentos cambian entre versiones, así que ninguna intercalación _ci coincide con la de SQL Server en todas.case_insensitive_collation
IDENTITYAUTO_INCREMENT, siguiendo después del id más altoCuenta la columna que encabeza la clave primaria; el contador sigue después del id más alto.
IDENTITY columns that don't lead the primary keyun entero simpleMariaDB cuenta una columna por tabla, al inicio de una clave; cualquier otra conserva sus valores sin contador.counter_dropped
CREATE SEQUENCECREATE SEQUENCE con las mismas opcionesLas secuencias de MariaDB funcionan de la misma forma. SSMS no escribe hasta dónde llegó una secuencia, así que empieza donde se creó.
computed columnscolumnas generadas, STORED cuando son PERSISTED, VIRTUAL en otro casoMariaDB las calcula de las mismas dos formas, con CONCAT escrito para que NULL cuente como vacío, como en SQL Server.
computed columns with functions MariaDB lacksuna columna simpleUna fórmula que no se puede escribir deja una columna simple y una línea en el informe; SSMS no escribe valores para las columnas calculadas.generated_not_translated
defaults with functions MariaDB lacks, and NEXT VALUE FORsin valor predeterminadoUn valor predeterminado que no se puede escribir se deja fuera y aparece en el informe.default_not_translated
CHECK constraintstraducidosLos mismos CHECK, comprobados al cargar cada fila.
CHECK constraints with functions MariaDB lacksno se creaUn CHECK que no se puede escribir se deja fuera y aparece en el informe.check_skipped
CHECK constraints added WITH NOCHECK or disabledno se creaSQL Server no aplica estos CHECK, así que las filas pueden no cumplirlos.check_not_enforced
filtered and columnstore indexesno se creaIntoSQL escribe índices b-tree sobre columnas completas; vuelve a crear los demás después de cargar.index_skipped
foreign keysclaves foráneas, cargadas con FOREIGN_KEY_CHECKS=0Las filas cargan en cualquier orden, y después las claves comprueban las filas nuevas.
foreign keys to tables the dump doesn't createno se creaUna clave no puede nombrar una tabla que no existe.foreign_key_skipped
tables on a partition schemeuna tabla con las filas de todas las particionesLas filas son las mismas; vuelve a particionar la tabla en MariaDB si lo necesita.partitions_dropped
temporal tables (SYSTEM_VERSIONING)WITH SYSTEM VERSIONING, a partir de las filas actuales; la tabla de historial como tabla simpleMariaDB conserva el historial por sí mismo de ahora en adelante; las columnas de periodo y la tabla de historial de SQL Server se copian como estaban.
schemasuna base de datos, con el nombre del esquema delante de cada tablaLos esquemas de MariaDB son bases de datos, que un script cargado en una sola base de datos no puede crear; las tablas de dbo conservan sus nombres.schemas_merged
NOT NULL columns with values that become NULLsin NOT NULLUna columna cuyos valores tuvieron que volverse NULL no puede conservar NOT NULL, o la carga se detendría.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionslistados en el informeSu código está escrito en T-SQL, así que se listan para que los vuelvas a crear.not_converted_objects
scripts without CREATE TABLE (data only)tipos leídos de los valoresUn script solo de datos solo tiene filas, así que los tipos salen de los valores.no_schema
expressions in INSERT valuesNULLUn convertidor que no ejecuta una base de datos no puede evaluarlas.expression_value
types IntoSQL doesn't knowlongtextEl texto admite cualquier valor; cambia el tipo después de cargar.unknown_type
NUL characters in textse conservaEl valor se copia con el carácter NUL escapado.
text that isn't valid in its encodinglos bytes incorrectos como carácter de reemplazoEl script es UTF-8 y cada valor tiene que ser texto válido.invalid_utf8_replaced
text decoded twice (ñ)se copia tal cualEl script contiene exactamente estos caracteres, así que se copian; el informe los señala.mojibake_suspected

Carga el script en MariaDB

El script crea las tablas, copia las filas y luego agrega claves, índices y claves foráneas, así que carga rápido y se detiene en el primer error.

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

Las claves foráneas se crean como las declara el volcado, con FOREIGN_KEY_CHECKS=0 mientras cargan las filas, como hace mysqldump.

Para un volcado grande, ejecuta el cliente en la misma máquina que el servidor, y sube max_allowed_packet si una sola fila es muy grande.

IntoSQL Pro carga el archivo directo en MariaDB desde la app de escritorio o la línea de comandos, sin escribir un script.

Haz el volcado de SQL Server para el mejor resultado

El convertidor lee lo que contiene el volcado. Estas opciones conservan más de tus datos en él:

  • En SSMS, haz clic derecho en la base de datos, Tasks, Generate Scripts, y elige las tablas. dbatools, mssql-scripter y otras herramientas basadas en la misma biblioteca escriben el mismo script.
  • En Advanced, cambia Types of data to script a Schema and data. Un script solo del esquema tiene tablas sin filas.
  • Guárdalo como Unicode, el formato predeterminado de SSMS, o como UTF-8: ambos se leen igual, y gzip también funciona.

Qué no se convierte

Las vistas, funciones, procedimientos, disparadores, sinónimos, reglas y políticas de seguridad se escriben en T-SQL. Aparecen en el informe por nombre, nunca se descartan en silencio, para que puedas reescribirlos para MariaDB.

Preguntas sobre SQL Server a MariaDB

¿No encuentras la respuesta? Escríbenos desde la página de contacto y te responde una persona. Página de contacto

¿Se sube mi volcado?

No. El convertidor se ejecuta en tu navegador y lee el volcado de tu disco por partes, así que nunca sale de tu computadora. La app de escritorio y la línea de comandos también convierten en tu computadora.

¿Qué tan grande puede ser el volcado?

El convertidor nunca tiene todo el volcado en memoria: lee el archivo dos veces, por rangos, y escribe el script sobre la marcha. Los volcados de varios gigabytes se convierten en el navegador, en la app de escritorio y con la línea de comandos.

¿Lee el archivo UTF-16 que guarda SSMS?

Sí. SSMS guarda los scripts en UTF-16 por defecto, y el convertidor lee UTF-16 y UTF-8 por igual, con gzip o sin él, con GO entre lotes.

¿De qué versiones de SQL Server puede venir el script?

Scripts que SSMS, dbatools o mssql-scripter escriben desde SQL Server 2017 en adelante. Cada script de prueba viene de SQL Server 2017, 2022 y 2025 y se compara con su origen celda por celda.

¿Se conservan los valores IDENTITY?

Sí, para una columna por tabla: la columna IDENTITY que encabeza la clave primaria se vuelve AUTO_INCREMENT y sigue después del id más alto. Las secuencias se vuelven secuencias de MariaDB con las mismas opciones.

¿Qué pasa con money, datetimeoffset y otros tipos de SQL Server?

bit se vuelve tinyint(1), money decimal(19,4), uniqueidentifier UUID y datetimeoffset datetime en UTC. Las tablas temporales conservan el versionado del sistema. Las columnas que no distinguían mayúsculas se comparan exactamente, y el informe dice cuáles.

¿Qué pasa con los procedimientos, los disparadores y las vistas?

Aparecen en el informe por nombre y no se convierten, porque cada base de datos los escribe en su propio lenguaje.

¿En qué versiones de MariaDB carga el script?

MariaDB 10.11 y posteriores. Cada script de prueba carga en 10.11 y 11.4, y se detiene en el primer error si algo sale mal.