MySQL vs SQL Server: differenze pratiche per chi lavora full stack
Le differenze che contano davvero tra MySQL e SQL Server nel lavoro quotidiano da full stack developer: licensing, tooling, sintassi, transazioni.
Uso MySQL su progetti PHP/Node e SQL Server nello stack .NET/Spring, e la differenza che si sente di più nel lavoro quotidiano non è la teoria relazionale — è simile su entrambi — ma dettagli molto pratici.
Non è (solo) una questione di performance
Su carichi di lavoro comuni (CRUD applicativo, non big data analytics), la differenza di performance tra i due è raramente il fattore decisivo. Le domande che contano davvero sono altre: che budget hai, che ecosistema usi già, che tooling il team conosce.
Licensing e costi
MySQL è open source (con edizione Community gratuita); SQL Server ha un'edizione Express gratuita ma limitata, e licenze a pagamento non banali per produzione enterprise. Su un progetto con budget vincolato o in ambiente Linux-first, MySQL (o un fork come MariaDB) è spesso la scelta di default.
Tooling
SQL Server con SQL Server Management Studio offre un'esperienza di amministrazione e debug molto matura — piani di esecuzione visuali, profiler integrato. MySQL Workbench copre le stesse basi, ma l'ecosistema attorno a SQL Server è più uniforme se sei già in stack Microsoft (Visual Studio, Azure).
Differenze di sintassi che mordono
Alcune differenze sembrano dettagli finché non ti bloccano una query:
-- MySQL: LIMIT
SELECT * FROM orders ORDER BY created_at DESC LIMIT 10;
-- SQL Server: TOP
SELECT TOP 10 * FROM orders ORDER BY created_at DESC;
-- MySQL: AUTO_INCREMENT
CREATE TABLE orders (id INT AUTO_INCREMENT PRIMARY KEY);
-- SQL Server: IDENTITY
CREATE TABLE orders (id INT IDENTITY(1,1) PRIMARY KEY);
Anche le funzioni per date, stringhe e concatenazione (CONCAT vs +)
divergono abbastanza da rendere il codice SQL scritto per uno non
portabile all'altro senza modifiche.
Transazioni e isolamento
Entrambi supportano transazioni ACID e i livelli di isolamento standard
SQL, ma il comportamento di default cambia: MySQL con InnoDB usa
REPEATABLE READ come default, SQL Server usa READ COMMITTED. Se un
bug di concorrenza si manifesta solo su un database e non sull'altro,
spesso la causa è proprio questa differenza, non un errore nella logica
applicativa.
Quale scelgo quando posso scegliere
Se il progetto è già in stack .NET o ha bisogno di integrazione stretta con l'ecosistema Microsoft, SQL Server. Se lo stack è PHP, Node o Java su infrastruttura Linux e il budget conta, MySQL. Nella pratica, però, la scelta del database raramente è davvero libera: segue lo stack che il progetto (o il cliente) ha già.
Conclusione
Le differenze tra MySQL e SQL Server non sono "quale motore SQL è migliore" in astratto, ma dettagli molto concreti — sintassi, licensing, comportamento di default nelle transazioni — che vale la pena conoscere prima di migrare uno schema da un motore all'altro.