Differenze tra MySQL e SQL Server [chiuso]


144

Sono uno sviluppatore ASP.NET che ha utilizzato Microsoft SQL Serverper tutte le esigenze del mio database (sia al lavoro che per progetti personali).

Sto pensando di provare lo stack LAMP per alcuni dei miei progetti personali.

Quali sono alcune delle principali differenze tra MySQLe SQL Server? L'uso delle stored procedure è una pratica comune in MySQL?

Qualche consiglio o risorsa che mi consiglieresti di aiutarmi con il passaggio?

Per coloro che hanno esperienza con entrambi, ci sono delle funzioni mancanti da MySQL?

Risposte:


139

Una cosa a cui devi fare attenzione sono le differenze abbastanza gravi nel modo in cui SQL Server e MySQL implementano la sintassi SQL.

Ecco un bel confronto tra diverse implementazioni SQL .

Ad esempio, dai un'occhiata alla sezione in alto-n. In MySQL:

SELECT age
FROM person
ORDER BY age ASC
LIMIT 1 OFFSET 2

In SQL Server (T-SQL):

SELECT TOP 3 WITH TIES *
FROM person
ORDER BY age ASC

27
e l'oracolo è anche diverso: seleziona * da (seleziona l'età dalla persona ordina per fa asc) dove rownum <= 3 Torna ANSI SQL, tutto è perdonato :)
gbjbaanb

9
Mi sono appena imbattuto in questo. Leggere tutte le differenze mi fa rabbrividire. Le basi sono le stesse (almeno in termini di comprensione), ma i dettagli sono molto, molto diversi.
JasCav,

21
forse un commento stupido, ma perché non ci può essere 1 sql lingua ?? ... c'è HTML diverso ?? ... quindi perché non 1 sql.
GreaterKing

4
@greaterKing HTML è una struttura stabilita e standard da un comitato / consorzio, SQL .. non lo è, è solo un linguaggio di scripting e l'unico proprietario è lo sviluppatore dell'interprete. È un po 'come Javascript in un certo senso, ogni browser ha il proprio motore JS e il proprio modo di interpretare lo script. È solo per pura pressione da parte della comunità che sono stati fatti sforzi per portare quel linguaggio a una sorta di solidarietà. Ma amico, vorrei che fossero tutti estremamente simili con differenze solo minori
RedactedProfile

2
T-SQL si traduce in Transact-SQL;) Sql Server include il linguaggio (T-SQL) ma è un software nel suo insieme, con GUI, che gestisce le richieste localmente e attraverso la rete ecc.
Botond Bertalan,

48

Molti commenti qui sembrano più argomenti religiosi che dichiarazioni di vita reale. Ho lavorato per anni con MySQL e MSSQL ed entrambi sono buoni prodotti. Sceglierei MySQL principalmente in base all'ambiente su cui stai lavorando. La maggior parte dei progetti open source usa MySQL, quindi se vai in quella direzione MySQL è la tua scelta. Se sviluppi qualcosa con .Net sceglierei MSSQL, non perché è molto meglio, ma solo perché è quello che la maggior parte delle persone usa. Attualmente sto lavorando a un progetto che utilizza ASP.NET con MySQL e C #. Funziona perfettamente.


3
A rigor di termini non pensi che non ci sia niente come MS SQL. Ciò che esiste è "MS SQL Server".
Infrangibile il

Sono sicuro che ne conosci più di me. Sono solo un principiante, per favore, fammi sapere se sbaglio? C'è qualcosa di esatto come MS SQL?
Infrangibile il

2
Non sono sicuro di quello che stai chiedendo?
Remy,

3
È corretto. Microsoft SQL Server 2012 o qualsiasi versione in uso.
Remy,

5
Al giorno d'oggi la programmazione si basa sugli acronimi. Facciamo l'esempio di te parlando di a Lamp Stack. Molte persone probabilmente diranno LAMP o WAMP. Allo stesso modo, invece di dire Microsoft SQL Server, abbiamo creato da MS SQL Server a MS SQL a MSSQL
ytpillai

23

Non riesco a credere che nessuno abbia menzionato che MySQL non supporta le dichiarazioni Common Table Expressions (CTE) / "con". È una differenza piuttosto fastidiosa.


Ho usato sia CTE che tabelle temp / variabili. Quale sarebbe il vantaggio di utilizzare un CTE rispetto agli ultimi due?
Jared,

8
@Jared L'utilizzo di CTE mantiene il codice leggibile perché non è necessario definire una tabella temporanea e i relativi tipi di colonna e utilizzando cte si ottiene persino un intellisense per il tipo e il nome della colonna anche se non sono stati specificati.
Aleks,

9
La ricorsione è un vantaggio che deve essere menzionato.
Faiz,

2
Mysql 8 supporta CTE
Ivanzinho il

Quindi mysql ora ottiene anche caramelle sintattiche.
TheLegendaryCopyCoder

15

MySQL ha maggiori probabilità di avere problemi di corruzione del database e non li risolve automaticamente quando si verificano. Ho lavorato con MSSQL dalla versione 6.5 e non ricordo un problema di corruzione del database che portava il database offline. Le poche volte in cui ho lavorato con MySQL in un ambiente di produzione, un problema di corruzione del database ha portato l'intero database offline fino a quando non abbiamo eseguito la cosa magica "per favore correggi il mio indice corrotto" dalla riga di comando.

Il sistema di journaling e transazioni di MSSQL, nella mia esperienza, gestisce praticamente qualsiasi cosa, incluso un ciclo di alimentazione o un guasto hardware, senza corruzione del database e se qualcosa viene incasinato lo risolve automaticamente.

Questa è stata la mia esperienza e sarei felice di sapere che è stato risolto o che stavamo facendo qualcosa di sbagliato.

http://dev.mysql.com/doc/refman/6.0/en/corrupted-myisam-tables.html

http://www.google.com/search?q=site%3Abugs.mysql.com+index+corruption


2
myIsam è pensato per risposte molto rapide, non ha obbligato il controllo delle chiavi esterne a essere più veloce. Prova a utilizzare il motore InnoDB se fai qualcosa di più serio. Ho avuto alcuni problemi davvero spiacevoli con MS Access e non posso perdonarli per tale irresponsabilità, quindi non favorisco nessuno dei database di MS, lascia che facciano sistemi operativi e offro seri affari alla comunità open source ... anche se non puoi essere sicuro di nulla da quando Oracle aveva superato MySQL ..
ante.sabo

8
Abbastanza giusto, ma è sciocco ignorare i database Microsoft basati su Access. L'accesso è un database desktop e non ha nulla a che fare con SQL Server. Sai StackOverflow funziona su SQL Server, giusto?
Jon Galloway,

@JonGalloway: Ciao, sono un principiante. Voglio solo sapere a rigor di termini abbiamo qualcosa come MS SQL. Penso che ciò che esiste sia MS SQL Server. Potete per favore chiarirmi su questo. Potrebbe essere una parola comune, quindi potresti averlo usato come MS SQL e avrebbe avuto senso per tutti. Ma sono un principiante, quindi sono un po 'fissato con le terminologie per ottenere il concetto. Per favore fatemi sapere di cosa state parlando è MS SQL o MS SQL Server?
Infrangibile il

1
Quando le persone dicono MSSQL, TSQL in genere significano il linguaggio SQL o Transaction SQL (TSQL) fornito con il prodotto Microsoft SQL Server. Questo non dovrebbe essere così difficile da scoprire. Leggi su en.wikipedia.org/wiki/Microsoft_SQL_Server
Faiz


7

Francamente, non riesco a trovare un solo motivo per usare MySQL piuttosto che MSSQL. Il problema prima era un costo, ma SQL Server 2005 Express è gratuito e ci sono molte società di web hosting che offrono hosting completo con server sql per meno di $ 5,00 al mese.

MSSQL è più facile da usare e ha molte funzionalità che non esistono in MySQL.


2
Penso che il prezzo sia l'unico vero motivo per scegliere MySQL su MSSQL. Certo, c'è un po 'di hosting MSSQL economico ma è raro e spesso fortemente limitato sullo spazio di archiviazione.
Craig,

21
Direi che le licenze sono una buona ragione per andare con MySQL.
Dr. Mike

3
Group_concat e REGEXP sono motivi più che sufficienti per utilizzare MySQL su SQL Server (anche se le due licenze sono state cambiate)
Michele

1
un altro motivo per cui andrei con MySQL sarebbe che se vuoi un database locale e scegli MS SQL Server dovresti avere un computer Windows in esecuzione, che include più costi di licenza ... specialmente se vuoi mantenerlo tutto aggiornato
Pedro Braz,

2
Sottovalutato perché penso che sia distorto e ovviamente inaccurato dire che non c'è un solo motivo per andare con MySQL su MSSQL. SQL Server Express ha gravi limitazioni rispetto a MySQL e nessun progetto serio utilizzerà Express, il che significa che il problema dei costi è ancora molto valido. La maggior parte delle più grandi aziende là fuori ha scelto MySQL / MariaDB su MSSQL. Personalmente, lo farei anche io, non solo per il problema delle licenze e dei costi, ma perché nella mia esperienza MySQL è molto più facile da lavorare. MySQL tende a funzionare, mentre mi trovo a combattere con MSSQL di tanto in tanto per farlo fare quello che voglio.
dallin

7

Tutto in MySQL sembra essere fatto più vicino al metal che in MSSQL, e la documentazione lo tratta in questo modo. Soprattutto per l'ottimizzazione, dovrai capire in che modo gli indici, la configurazione del sistema e l'ottimizzatore interagiscono in varie circostanze.

L '"ottimizzatore" è più un parser. In MSSQL il tuo piano di query è spesso una sorpresa (di solito buono, a volte no). In MySQL, fa praticamente quello che gli hai chiesto di fare, come ti aspettavi. Ciò significa che tu stesso devi avere una profonda comprensione dei vari modi in cui potrebbe essere fatto.

Non costruito attorno a un buon modello di TRANSAZIONE (motore MyISAM predefinito).

L'installazione del file system è il tuo problema.

Tutta la configurazione del database è il tuo problema, in particolare di varie dimensioni della cache.

A volte sembra meglio pensarlo come un isam ad hoc e glorificato. Codd e Date non hanno molto peso qui. Lo direbbero senza imbarazzo.


3
Per impostazione predefinita, MySQL moderno utilizza Innodb, solo un punto di chiarimento. Penso dopo la 5.1 o giù di lì. Innodb supporta transazioni, chiavi esterne e blocco a livello di riga rispetto al blocco a livello di tabella con MyISAM.
Joseph Hamilton,

5

Penso che una delle cose più importanti a cui prestare attenzione sia che le versioni precedenti a MySQL 5.0 non avevano viste, trigger e procedure memorizzate.

Maggiori informazioni sono spiegate nella pagina di download di MySQL 5.0 .


4

@abdu

La cosa principale che ho scoperto che MySQL ha su MSSQL è il supporto del fuso orario - la possibilità di cambiare piacevolmente tra i fusi orari, rispettando l'ora legale è fantastica.

Confronta questo:

mysql> SELECT CONVERT_TZ('2008-04-01 12:00:00', 'UTC', 'America/Los_Angeles');
+-----------------------------------------------------------------+
| CONVERT_TZ('2008-04-01 12:00:00', 'UTC', 'America/Los_Angeles') |
+-----------------------------------------------------------------+
| 2008-04-01 05:00:00                                             |
+-----------------------------------------------------------------+

alle contorsioni coinvolte in questa risposta .

Per quanto riguarda il commento "più facile da usare", direi che il punto è che sono diversi e, se ne conosci uno, ci sarà un sovraccarico nell'apprendimento dell'altro.


Inoltre, correggi il supporto ansi per il raggruppamento, colonne di data / ora automatiche, MOLTO semplice paging ...
Joel Coehoorn,

1
Il supporto del fuso orario di MySQL è significativamente rotto, non penso che sia una funzione utile. Fallo invece nell'applicazione.
Mark R,

Non ho avuto problemi con il supporto del fuso orario, potresti approfondire qualche dettaglio o fornire un link per favore?
Cebjyre,

2
Perché avresti bisogno del supporto del fuso orario nel database? Usa UTC ovunque e esegui il rendering nel front-end / gui utilizzando il fuso orario locale del sistema operativo.
Tiberiu-Ionuț Stan

4

Entrambi sono server SQL Server Product DBQ è un'applicazione commerciale mentre MySql è un'applicazione opensouces. Entrambi i prodotti includono funzionalità simili, tuttavia SQL Server dovrebbe essere utilizzato per una soluzione aziendale, mentre mysql potrebbe soddisfare un'implementazione più piccola. Se hai bisogno di funzionalità come il recupero, replica, sicurezza granalare e significativa, è necessario SQL Server

MySql occupa meno spazio sul disco e utilizza meno memoria e CPU rispetto al server sql


3

Qualcuno ha qualche buona esperienza con una "porta" di un database da SQL Server a MySQL?

Questo dovrebbe essere abbastanza doloroso! Ho cambiato le versioni di MySQL da 4.xa 5.x e varie istruzioni non funzionavano più come una volta. L'analizzatore di query è stato "migliorato", in modo che le istruzioni precedentemente ottimizzate per le prestazioni non funzionassero più come previsto.

La lezione appresa lavorando con un database MySQL da 500 GB: è un argomento sottile e tutt'altro che banale!


2

@Cebjyre. L'IDE sia che Enterprise Manager o Management Studio sia migliore di qualsiasi cosa abbia visto finora per MySQL. Dico "più facile da usare" perché posso fare molte cose in MSSQL dove MySQL non ha controparti. In MySQL non ho idea di come ottimizzare le query semplicemente guardando il piano di query o guardando le statistiche. La procedura guidata per la regolazione degli indici in MSSQL prende la maggior parte del lavoro di ipotesi su ciò che gli indici mancano o sono fuori luogo.

Un difetto di MySQL è che non esiste una dimensione massima per un database. Il database aumenterebbe di dimensioni fino a riempire il disco. Immagina se questo disco condivide database con altri utenti e improvvisamente tutte le loro query falliscono perché i loro database non possono crescere. Ho segnalato questo problema a MySQL molto tempo fa. Non credo sia ancora stato risolto.


2
D'altra parte, sono stato infastidito dalla console di Management Studio che non rispetta correttamente l'annullamento (è possibile avere una query valida che soffoca, perché non si rende conto che il testo è stato aggiornato) e la mancanza di tab -expansion (rispetto alla shell mysql). Ci sono svantaggi su entrambi i lati.
Cebjyre,

1

Passando un po 'di tempo a lavorare con MySQL da MSSQL alla sintassi MySQL POV, continuavo a trovarmi limitato in ciò che potevo fare.

Esistono limiti bizzarri sull'aggiornamento di una tabella durante il rifacimento della stessa tabella durante un aggiornamento.

Inoltre UPDATE FROM non funziona e l'ultima volta che ho controllato non supportano nemmeno la sintassi Oracle MERGE INTO. Questo è stato un punto fermo per me e ho smesso di pensare che sarei arrivato ovunque con MySQL.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.