Vai al contenuto
Home di IntoSQL

Converti SQL Server in MySQL

Trascina lo script che Generate Scripts di SSMS scrive con schema e dati, come .sql o .sql.gz, UTF-16 o UTF-8, e scarica uno script per MySQL con le stesse tabelle, chiavi, indici e dati. Ogni valore che MySQL non può contenere così com'è, e ogni oggetto che non supporta, è elencato nel report.

Il tuo file
sqlshop_2024_sqlserver.sqlFile di esempio, 11 kB
Il tuo database

18 righe convertite, 3 correzioni, nessuna rifiutata

Mostra

Tabelle in shop_2024_sqlserver.sqlDump SQL Server · scritto da SQL Server Management Objects · utf-8

  • orders10 righe1
    11 colonne
    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 righe2
    8 colonne
    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 convertiti

  • Vista paid_orders
  • Trigger orders_no_negative

Ogni database li scrive nel proprio linguaggio. Riscrivili per 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;

Correzioni

  1. "shipped_at" di orders è datetime2(7), con più cifre di secondo di quante ne mantenga MySQL, quindi è datetime(6) e le ultime cifre vengono troncate.
  2. "created_at" di customers contiene istanti con fuso orario; MySQL non ha un tipo che lo conservi, quindi sono salvati in UTC come datetime.
  3. "row_version" di customers è una versione di riga che SQL Server imposta da solo; il dump non ha valori per essa, quindi è blob e vuota.

Da controllare

  • 6 colonne di testo confrontano ignorando maiuscole e minuscole nell'origine; MySQL confronta in modo esatto, quindi chiavi univoche e ricerche possono comportarsi diversamente. Usa una collation o un tipo di colonna che ignora maiuscole e minuscole nelle colonne che ne hanno bisogno.
  • 2 viste, trigger, routine o eventi non sono convertiti; il report li elenca uno per uno. Ricreali a mano in MySQL.
  • Il vincolo CHECK check1 su orders non si può scrivere per MySQL (function isjson), quindi non viene creato. Se conta, scrivi a mano il vincolo CHECK.
  • L'indice idx_orders_pending su orders usa un'espressione che non si può scrivere per MySQL (neither MySQL 5.7 nor MariaDB index an expression), quindi non viene creato. Crea l'indice a mano se le query ne hanno bisogno.
  • Il valore predefinito di "order_ref" in orders non si può scrivere per MySQL (a default expression needs MySQL 8.0.13), quindi la colonna non ha un valore predefinito. Aggiungi a mano il valore predefinito se le nuove righe ne hanno bisogno.

Il tuo file viene convertito su questo computer e non viene mai caricato.

Altri esempi:

Cosa cambia da SQL Server a MySQL

Ogni riga è una regola che il convertitore applica, con la riga del report che scrive quando la regola cambia qualcosa nei tuoi dati.

  • bit

    tinyint(1)

    Il BOOLEAN di MySQL è TINYINT(1): 1 e 0, come li contiene bit.

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

    char(n), varchar(n) fino a 1024 caratteri, tipi text oltre

    Il testo mantiene ogni carattere come utf8mb4. Una colonna in una chiave è al massimo varchar(768), il massimo che una chiave contiene, e lo stesso vale per il testo con un valore predefinito, che MySQL 5.7 dà solo a varchar.

  • decimal(p,s), money, smallmoney

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

    decimal contiene 65 cifre, più delle 38 di SQL Server, quindi ogni valore è esatto.

  • datetime, datetime2, smalldatetime

    datetime(p)

    In entrambi un datetime è l'ora letta su un orologio.

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

    sei cifre di secondo, la settima troncata

    MySQL mantiene i microsecondi; la settima cifra (100 nanosecondi) viene troncata, mai arrotondata, quindi nessun valore passa al secondo o al giorno successivo.

    Riga del report: fraction_cut

  • datetimeoffset

    datetime(p) in UTC

    Il TIMESTAMP di MySQL arriva solo al 2038, quindi gli istanti sono salvati come datetime in UTC, lo stesso istante qualunque offset avesse ogni valore.

    Riga del report: moments_as_utc

  • time

    time(p)

    Le stesse ore del giorno.

  • dates before the year 1000

    NULL

    MySQL salva gli anni dal 1000 al 9999, e SQL Server risale fino all'anno 1. Quei valori diventano NULL e il report li conta.

    Riga del report: date_out_of_range

  • json (SQL Server 2025)

    json

    Gli stessi valori JSON, che le funzioni JSON di MySQL leggono.

  • uniqueidentifier

    char(36)

    Gli stessi identificatori, scritti in minuscolo.

  • binary, varbinary, image

    binary(n), varbinary(n) e tipi blob

    I byte restano byte.

  • geometry, geography

    blob con i byte propri di SQL Server

    SSMS scrive i valori spaziali nella serializzazione di SQL Server, che viene mantenuta byte per byte.

    Riga del report: spatial_as_native

  • rowversion, timestamp

    blob, vuoto

    SQL Server imposta da solo una versione di riga e lo script di SSMS non ne include i valori.

    Riga del report: rowversion_empty

  • xml, sql_variant, hierarchyid, vector

    longtext

    MySQL non ha un tipo equivalente; xml e sql_variant mantengono il testo di ogni valore e hierarchyid il suo percorso, come /1/2/.

    Riga del report: type_replaced

  • collations that ignore case (_CI_)

    confronto esatto (utf8mb4_bin)

    Le tabelle usano utf8mb4_bin così le chiavi uniche distinguono ciò che SQL Server distingueva; le colonne che ignoravano le maiuscole lo perdono. Le regole sugli accenti cambiano tra versioni, quindi nessuna collation _ci coincide con quella di SQL Server su tutte.

    Riga del report: case_insensitive_collation

  • IDENTITY

    AUTO_INCREMENT, che riparte dopo l'id più alto

    Conta la colonna che apre la chiave primaria; il contatore riparte dopo l'id più alto.

  • IDENTITY columns that don't lead the primary key

    un intero semplice

    MySQL conta una colonna per tabella, all'inizio di una chiave; ogni altra mantiene i suoi valori senza contatore.

    Riga del report: counter_dropped

  • CREATE SEQUENCE

    non creato

    MySQL non ha sequenze. I valori assegnati da una sequenza sono nelle righe.

    Riga del report: sequence_not_converted

  • computed columns

    colonne generate, STORED se PERSISTED, altrimenti VIRTUAL

    MySQL le calcola negli stessi due modi, con CONCAT scritto in modo che NULL valga come vuoto come in SQL Server.

  • computed columns with functions MySQL lacks

    una colonna semplice

    Una formula che non si può scrivere lascia una colonna semplice e una riga nel report; lo script di SSMS non include valori per le colonne calcolate.

    Riga del report: generated_not_translated

  • defaults with functions MySQL lacks, and NEXT VALUE FOR

    nessun valore predefinito

    Un valore predefinito che non si può scrivere viene omesso e segnalato.

    Riga del report: default_not_translated

  • CHECK constraints

    tradotti

    MySQL 5.7 li mantiene senza verificarli; gli altri li verificano mentre si carica ogni riga.

  • CHECK constraints with functions MySQL lacks

    non creato

    Un vincolo CHECK che non si può scrivere viene omesso e segnalato.

    Riga del report: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    non creato

    SQL Server non applica questi vincoli CHECK, quindi le righe potrebbero violarli.

    Riga del report: check_not_enforced

  • filtered and columnstore indexes

    non creato

    IntoSQL scrive indici b-tree su colonne intere; ricrea gli altri dopo il caricamento.

    Riga del report: index_skipped

  • foreign keys

    chiavi esterne, caricate con FOREIGN_KEY_CHECKS=0

    Le righe si caricano in qualsiasi ordine, e le chiavi verificano le nuove righe dopo.

  • foreign keys to tables the dump doesn't create

    non creato

    Una chiave non può riferirsi a una tabella che non c'è.

    Riga del report: foreign_key_skipped

  • tables on a partition scheme

    una tabella con le righe di ogni partizione

    Le righe sono le stesse; partiziona di nuovo la tabella in MySQL se serve.

    Riga del report: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    due tabelle: le righe attuali e la cronologia

    La tabella e la sua tabella di cronologia vengono copiate come tabelle semplici; MySQL non mantiene la cronologia da solo.

    Riga del report: system_versioning_dropped

  • schemas

    un database, tabelle con il nome del loro schema davanti

    Gli schemi di MySQL sono database, che uno script caricato in un solo database non può creare; le tabelle in dbo mantengono il loro nome.

    Riga del report: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL rimosso

    Una colonna i cui valori sono dovuti diventare NULL non può mantenere NOT NULL, altrimenti il caricamento si fermerebbe.

    Riga del report: not_null_relaxed

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

    elencati nel report

    Il loro codice è scritto in T-SQL, quindi vengono elencati perché tu li ricrei.

    Riga del report: not_converted_objects

  • scripts without CREATE TABLE (data only)

    tipi ricavati dai valori

    Uno script di soli dati contiene solo righe, quindi i tipi vengono ricavati dai valori.

    Riga del report: no_schema

  • expressions in INSERT values

    NULL

    Un convertitore che non esegue un database non può valutarle.

    Riga del report: expression_value

  • types IntoSQL doesn't know

    longtext

    Il testo contiene qualsiasi valore; cambia il tipo dopo il caricamento.

    Riga del report: unknown_type

  • NUL characters in text

    mantenuto

    Il valore viene copiato con il carattere NUL in escape.

  • text that isn't valid in its encoding

    i byte errati come carattere di sostituzione

    Lo script è in UTF-8 e ogni valore deve essere testo valido.

    Riga del report: invalid_utf8_replaced

  • text decoded twice (ñ)

    copiato così com'è

    Lo script contiene esattamente questi caratteri, quindi vengono copiati; il report li segnala.

    Riga del report: mojibake_suspected

In SQL ServerIn MySQLRiga del report
bittinyint(1)Il BOOLEAN di MySQL è TINYINT(1): 1 e 0, come li contiene bit.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), textchar(n), varchar(n) fino a 1024 caratteri, tipi text oltreIl testo mantiene ogni carattere come utf8mb4. Una colonna in una chiave è al massimo varchar(768), il massimo che una chiave contiene, e lo stesso vale per il testo con un valore predefinito, che MySQL 5.7 dà solo a varchar.
decimal(p,s), money, smallmoneydecimal(p,s); money come decimal(19,4)decimal contiene 65 cifre, più delle 38 di SQL Server, quindi ogni valore è esatto.
datetime, datetime2, smalldatetimedatetime(p)In entrambi un datetime è l'ora letta su un orologio.
datetime2(7), time(7) and datetimeoffset(7)sei cifre di secondo, la settima troncataMySQL mantiene i microsecondi; la settima cifra (100 nanosecondi) viene troncata, mai arrotondata, quindi nessun valore passa al secondo o al giorno successivo.fraction_cut
datetimeoffsetdatetime(p) in UTCIl TIMESTAMP di MySQL arriva solo al 2038, quindi gli istanti sono salvati come datetime in UTC, lo stesso istante qualunque offset avesse ogni valore.moments_as_utc
timetime(p)Le stesse ore del giorno.
dates before the year 1000NULLMySQL salva gli anni dal 1000 al 9999, e SQL Server risale fino all'anno 1. Quei valori diventano NULL e il report li conta.date_out_of_range
json (SQL Server 2025)jsonGli stessi valori JSON, che le funzioni JSON di MySQL leggono.
uniqueidentifierchar(36)Gli stessi identificatori, scritti in minuscolo.
binary, varbinary, imagebinary(n), varbinary(n) e tipi blobI byte restano byte.
geometry, geographyblob con i byte propri di SQL ServerSSMS scrive i valori spaziali nella serializzazione di SQL Server, che viene mantenuta byte per byte.spatial_as_native
rowversion, timestampblob, vuotoSQL Server imposta da solo una versione di riga e lo script di SSMS non ne include i valori.rowversion_empty
xml, sql_variant, hierarchyid, vectorlongtextMySQL non ha un tipo equivalente; xml e sql_variant mantengono il testo di ogni valore e hierarchyid il suo percorso, come /1/2/.type_replaced
collations that ignore case (_CI_)confronto esatto (utf8mb4_bin)Le tabelle usano utf8mb4_bin così le chiavi uniche distinguono ciò che SQL Server distingueva; le colonne che ignoravano le maiuscole lo perdono. Le regole sugli accenti cambiano tra versioni, quindi nessuna collation _ci coincide con quella di SQL Server su tutte.case_insensitive_collation
IDENTITYAUTO_INCREMENT, che riparte dopo l'id più altoConta la colonna che apre la chiave primaria; il contatore riparte dopo l'id più alto.
IDENTITY columns that don't lead the primary keyun intero sempliceMySQL conta una colonna per tabella, all'inizio di una chiave; ogni altra mantiene i suoi valori senza contatore.counter_dropped
CREATE SEQUENCEnon creatoMySQL non ha sequenze. I valori assegnati da una sequenza sono nelle righe.sequence_not_converted
computed columnscolonne generate, STORED se PERSISTED, altrimenti VIRTUALMySQL le calcola negli stessi due modi, con CONCAT scritto in modo che NULL valga come vuoto come in SQL Server.
computed columns with functions MySQL lacksuna colonna sempliceUna formula che non si può scrivere lascia una colonna semplice e una riga nel report; lo script di SSMS non include valori per le colonne calcolate.generated_not_translated
defaults with functions MySQL lacks, and NEXT VALUE FORnessun valore predefinitoUn valore predefinito che non si può scrivere viene omesso e segnalato.default_not_translated
CHECK constraintstradottiMySQL 5.7 li mantiene senza verificarli; gli altri li verificano mentre si carica ogni riga.
CHECK constraints with functions MySQL lacksnon creatoUn vincolo CHECK che non si può scrivere viene omesso e segnalato.check_skipped
CHECK constraints added WITH NOCHECK or disablednon creatoSQL Server non applica questi vincoli CHECK, quindi le righe potrebbero violarli.check_not_enforced
filtered and columnstore indexesnon creatoIntoSQL scrive indici b-tree su colonne intere; ricrea gli altri dopo il caricamento.index_skipped
foreign keyschiavi esterne, caricate con FOREIGN_KEY_CHECKS=0Le righe si caricano in qualsiasi ordine, e le chiavi verificano le nuove righe dopo.
foreign keys to tables the dump doesn't createnon creatoUna chiave non può riferirsi a una tabella che non c'è.foreign_key_skipped
tables on a partition schemeuna tabella con le righe di ogni partizioneLe righe sono le stesse; partiziona di nuovo la tabella in MySQL se serve.partitions_dropped
temporal tables (SYSTEM_VERSIONING)due tabelle: le righe attuali e la cronologiaLa tabella e la sua tabella di cronologia vengono copiate come tabelle semplici; MySQL non mantiene la cronologia da solo.system_versioning_dropped
schemasun database, tabelle con il nome del loro schema davantiGli schemi di MySQL sono database, che uno script caricato in un solo database non può creare; le tabelle in dbo mantengono il loro nome.schemas_merged
NOT NULL columns with values that become NULLNOT NULL rimossoUna colonna i cui valori sono dovuti diventare NULL non può mantenere NOT NULL, altrimenti il caricamento si fermerebbe.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionselencati nel reportIl loro codice è scritto in T-SQL, quindi vengono elencati perché tu li ricrei.not_converted_objects
scripts without CREATE TABLE (data only)tipi ricavati dai valoriUno script di soli dati contiene solo righe, quindi i tipi vengono ricavati dai valori.no_schema
expressions in INSERT valuesNULLUn convertitore che non esegue un database non può valutarle.expression_value
types IntoSQL doesn't knowlongtextIl testo contiene qualsiasi valore; cambia il tipo dopo il caricamento.unknown_type
NUL characters in textmantenutoIl valore viene copiato con il carattere NUL in escape.
text that isn't valid in its encodingi byte errati come carattere di sostituzioneLo script è in UTF-8 e ogni valore deve essere testo valido.invalid_utf8_replaced
text decoded twice (ñ)copiato così com'èLo script contiene esattamente questi caratteri, quindi vengono copiati; il report li segnala.mojibake_suspected

Carica lo script in MySQL

Lo script crea le tabelle, copia le righe, poi aggiunge chiavi, indici e chiavi esterne, così si carica in fretta e si ferma al primo errore.

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

Le chiavi esterne vengono create come le dichiara il dump, con FOREIGN_KEY_CHECKS=0 mentre le righe si caricano, così una riga che punta a una riga mancante non ferma il caricamento.

Per un dump grande, esegui il client sulla stessa macchina del server, e aumenta max_allowed_packet se una singola riga è molto grande.

IntoSQL Pro carica il file direttamente in MySQL dall'app desktop o dalla riga di comando, senza scrivere uno script.

Fai il dump di SQL Server per il miglior risultato

Il convertitore legge ciò che il dump contiene. Con queste opzioni il dump conserva più dei tuoi dati:

  • In SSMS, clic destro sul database, Tasks, Generate Scripts, e scegli le tabelle. dbatools, mssql-scripter e altri strumenti basati sulla stessa libreria scrivono lo stesso script.
  • In Advanced, imposta Types of data to script su Schema and data. Uno script del solo schema ha tabelle senza righe.
  • Salvalo come Unicode, il default di SSMS, o come UTF-8: entrambi vengono letti allo stesso modo, e funziona anche gzip.

Cosa non viene convertito

Viste, funzioni, procedure, trigger, sinonimi, regole e policy di sicurezza sono scritti in T-SQL. Sono elencati per nome nel report, mai rimossi in silenzio, così puoi riscriverli per MySQL.

Domande sulla conversione da SQL Server a MySQL

Non trovi la risposta? Scrivici dalla pagina dei contatti e ti risponde una persona. Pagina dei contatti

Il mio dump viene caricato?

No. Il convertitore funziona nel tuo browser e legge il dump dal tuo disco a pezzi, quindi non lascia mai il tuo computer. Anche l'app desktop e la riga di comando convertono sul tuo computer.

Quanto può essere grande il dump?

Il convertitore non tiene mai l'intero dump in memoria: legge il file due volte, per intervalli, e scrive lo script man mano. I dump di più gigabyte si convertono nel browser, nell'app desktop e con la riga di comando.

Legge il file UTF-16 che salva SSMS?

Sì. SSMS salva gli script in UTF-16 di default, e il convertitore legge allo stesso modo UTF-16 e UTF-8, compressi con gzip o no, con GO tra i batch.

Da quali versioni di SQL Server può provenire lo script?

Script scritti da SSMS, dbatools o mssql-scripter da SQL Server 2017 in poi. Ogni script di test viene da SQL Server 2017, 2022 e 2025 ed è confrontato con la sorgente cella per cella.

I valori IDENTITY vengono mantenuti?

Sì, per una colonna per tabella: la colonna IDENTITY all'inizio della chiave primaria diventa AUTO_INCREMENT e riparte dopo l'id più alto. Le sequenze non vengono create, perché MySQL non ne ha, e il report lo dice.

Cosa succede a money, datetimeoffset e altri tipi di SQL Server?

bit diventa tinyint(1), money decimal(19,4), uniqueidentifier char(36) e datetimeoffset datetime in UTC. Gli schemi diventano prefissi dei nomi di tabella in un solo database. Le colonne che ignoravano le maiuscole confrontano in modo esatto, e il report dice quali.

E procedure, trigger e viste?

Sono elencati per nome nel report e non vengono convertiti, perché ogni database li scrive nel proprio linguaggio.

Su quali versioni di MySQL si carica lo script?

MySQL 5.7 e successive. Ogni script di test si carica su 5.7 e 9, fermandosi al primo errore se qualcosa va storto.