Vittorio Turiaci

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.

MySQLSQL ServerDatabase

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.