Diferencias entre MySQL y SQL Server [cerrado]


144

Soy un desarrollador de ASP.NET que ha utilizado Microsoft SQL Serverpara todas mis necesidades de bases de datos (tanto en el trabajo como para proyectos personales).

Estoy considerando probar la pila LAMP para algunos de mis proyectos personales.

¿Cuáles son algunas de las principales diferencias entre MySQLy SQL Server? ¿Es el uso de procedimientos almacenados una práctica común en MySQL?

¿Algún consejo o recurso que me recomendarías para ayudarme con el cambio?

Para aquellos que tienen experiencia con ambos, ¿faltan características MySQL?

Respuestas:


139

Una cosa que debe tener en cuenta son las diferencias bastante graves en la forma en que SQL Server y MySQL implementan la sintaxis de SQL.

Aquí hay una buena comparación de diferentes implementaciones de SQL .

Por ejemplo, eche un vistazo a la sección top-n. En MySQL:

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

En SQL Server (T-SQL):

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

27
y Oracle también es diferente: seleccione * desde (seleccione la edad de la persona ordenada por asc antes) donde rownum <= 3 Regrese ANSI SQL, todo está perdonado :)
gbjbaanb

9
Solo me encontré con esto. Leer acerca de todas las diferencias me pone nervioso. Los conceptos básicos son los mismos (al menos en términos de comprensión), pero los detalles son muy, muy diferentes.
JasCav

21
tal vez un comentario tonto, pero ¿por qué no puede haber 1 lenguaje sql? ... ¿hay diferentes html ?? ... así que ¿por qué no 1 sql?
GreaterKing

44
@greaterKing HTML es una estructura establecida y estándar por un comité / consorcio, SQL ... no lo es, es solo un lenguaje de script y el único propietario es el desarrollador del intérprete. En cierto modo, es como Javascript, cada navegador tiene su propio motor JS y su propia forma de interpretar el script. Es solo por la presión de la comunidad que se han realizado esfuerzos para llevar ese lenguaje a algún tipo de solidaridad. Pero el hombre tampoco deseo que eran todos muy similares, con sólo pequeñas diferencias
RedactedProfile

2
T-SQL se traduce en Transact-SQL;) SQL Server incluye el idioma (T-SQL), pero es un software en su conjunto, la interfaz gráfica de usuario, el manejo de solicitudes a nivel local como a través de la red, etc.
Botond Bertalan

48

Muchos comentarios aquí parecen más argumentos religiosos que declaraciones de la vida real. He trabajado durante años con MySQL y MSSQL y ambos son buenos productos. Elegiría MySQL principalmente en función del entorno en el que esté trabajando. La mayoría de los proyectos de código abierto usan MySQL, así que si vas en esa dirección, MySQL es tu elección. Si desarrolla algo con .Net, elegiría MSSQL, no porque sea mucho mejor, sino porque eso es lo que la mayoría de la gente usa. Actualmente estoy en un proyecto que usa ASP.NET con MySQL y C #. Funciona perfectamente bien.


3
Estrictamente hablando, ¿no crees que no hay nada como MS SQL? Lo que existe es "MS SQL Server".
Irrompible el

Estoy seguro de que sabes más que yo. Solo soy un principiante, ¿puede decirme si me equivoco? ¿Hay algo exacto como MS SQL?
Irrompible el

2
No estoy seguro de lo que estás preguntando?
Remy

3
Eso es correcto. Microsoft SQL Server 2012 o cualquier versión que use.
Remy

55
La programación se trata de acrónimos hoy en día. Tomemos el ejemplo de usted hablando de a Lamp Stack. Mucha gente probablemente dirá LAMP o WAMP. Del mismo modo, en lugar de decir Microsoft SQL Server, lo convertimos en MS SQL Server a MS SQL a MSSQL
ytpillai

23

No puedo creer que nadie haya mencionado que MySQL no admite expresiones de tabla común (CTE) / "con" declaraciones. Es una diferencia bastante molesta.


He usado tanto CTE como tablas temporales / variables. ¿Cuál sería el beneficio de usar un CTE sobre los dos últimos?
Jared

8
@Jared Usando CTEs mantiene el código legible porque no necesita definir una tabla temporal y sus tipos de columna y al usar cte incluso obtiene un sentido inteligente para el tipo y nombre de columna, incluso si no los especificó.
Aleks

9
La recursión es un beneficio que necesita una mención.
Faiz

2
Mysql 8 es compatible con CTE
Ivanzinho

Entonces mysql ahora también obtiene dulces sintácticos.
TheLegendaryCopyCoder

15

Es más probable que MySQL tenga problemas de corrupción de la base de datos, y no los soluciona automáticamente cuando ocurren. He trabajado con MSSQL desde la versión 6.5 y no recuerdo un problema de corrupción de la base de datos que desconectó la base de datos. Las pocas veces que trabajé con MySQL en un entorno de producción, un problema de corrupción de la base de datos desconectó toda la base de datos hasta que ejecutamos la cosa mágica "arregla mi índice dañado" desde la línea de comandos.

El sistema de registro y transacciones de MSSQL, en mi experiencia, maneja casi cualquier cosa, incluido un ciclo de energía o falla de hardware, sin corrupción de la base de datos, y si algo se estropea, lo arregla automáticamente.

Esta ha sido mi experiencia, y me alegraría saber que esto se ha solucionado o que estábamos haciendo algo mal.

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 está destinado a respuestas realmente rápidas, no ha forzado la verificación de clave externa en razón para ser más rápido. Intente usar el motor InnoDB si está haciendo algo más serio. Tuve algunos problemas realmente desagradables con MS Access, y no puedo perdonarlos por tal irresponsabilidad, por lo que no favorezco ninguna de las bases de datos de MS, no les dejo hacer OS, y ofrezco negocios serios a la comunidad de código abierto ... aunque no puede ser seguro de algo desde que Oracle había superado a MySQL ..
ante.sabo

8
Es justo, pero es una tontería ignorar las bases de datos de Microsoft basadas en Access. Acceder es una base de datos de escritorio y no tiene nada que ver con SQL Server. Sabes que StackOverflow se ejecuta en SQL Server, ¿verdad?
Jon Galloway

@ JonGalloway: Hola, soy un principiante. Solo quiero saber estrictamente hablando si tenemos algo como MS SQL. Creo que lo que existe es MS SQL Server. ¿Pueden aclararme esto? Puede ser una palabra común, por lo que puede haberla usado como MS SQL y habría tenido sentido para todos. Pero soy un principiante, así que estoy un poco obsesionado con las terminologías para entender el concepto. Por favor, hágame saber de lo que está hablando es MS SQL o MS SQL Server.
Irrompible el

1
Cuando las personas dicen MSSQL, TSQL, generalmente se refieren al lenguaje SQL o Transaction SQL (TSQL) enviado con el producto Microsoft SQL Server. Esto no debería ser tan difícil de descubrir. Leer en es.wikipedia.org/wiki/Microsoft_SQL_Server
Faiz


7

Francamente, no puedo encontrar una sola razón para usar MySQL en lugar de MSSQL. El problema antes era el costo, pero SQL Server 2005 Express es gratuito y hay muchas empresas de alojamiento web que ofrecen alojamiento completo con servidor sql por menos de $ 5.00 al mes.

MSSQL es más fácil de usar y tiene muchas características que no existen en MySQL.


2
Creo que el precio es la única razón real para elegir MySQL sobre MSSQL. Claro, hay un alojamiento MSSQL barato, pero es raro y a menudo muy limitado en almacenamiento.
Craig

21
Yo diría que la licencia es una buena razón para usar MySQL.
Dr. Mike

3
Group_concat y REGEXP son razones más que suficientes para usar MySQL sobre SQL Server (incluso si se cambiaron las dos licencias)
Michele

1
Otra razón por la que elegiría MySQL sería que si desea una base de datos local y opta por el servidor MS SQL, debería tener una máquina Windows en funcionamiento, lo que incluye más costos de licencia ... especialmente si desea mantenerlo todo actualizado
Pedro Braz

2
Votado en contra porque creo que es parcial y obviamente inexacto decir que no hay una sola razón para usar MySQL sobre MSSQL. SQL Server Express tiene limitaciones severas que MySQL no tiene, y ningún proyecto serio va a usar Express, lo que significa que el problema de costo sigue siendo muy válido. La mayoría de las compañías más grandes del mercado eligieron MySQL / MariaDB sobre MSSQL. Personalmente, yo también lo haría, no solo por el problema de las licencias y los costos, sino porque, según mi experiencia, es mucho más fácil trabajar con MySQL. MySQL tiende a funcionar, mientras que ocasionalmente me encuentro luchando con MSSQL para que haga lo que quiero.
dallin

7

Todo en MySQL parece estar más cerca del metal que en MSSQL, y la documentación lo trata de esa manera. Especialmente para la optimización, deberá comprender cómo interactúan los índices, la configuración del sistema y el optimizador en diversas circunstancias.

El "optimizador" es más un analizador sintáctico. En MSSQL, su plan de consultas suele ser una sorpresa (generalmente bueno, a veces no). En MySQL, hace más o menos lo que le pediste que hiciera, como esperabas. Lo que significa que usted mismo necesita tener una comprensión profunda de las diversas formas en que se puede hacer.

No se basa en un buen modelo de TRANSACCIÓN (motor MyISAM predeterminado).

La configuración del sistema de archivos es su problema.

Toda la configuración de la base de datos es su problema, especialmente varios tamaños de caché.

A veces parece mejor pensarlo como un isam glorificado ad-hoc. Codd y Date no tienen mucho peso aquí. Lo dirían sin vergüenza.


3
Sin embargo, el MySQL moderno por defecto es Innodb, solo un punto de aclaración. Creo que después de 5.1 más o menos. Innodb admite transacciones, claves externas y bloqueo de nivel de fila en lugar de bloqueo de nivel de tabla con MyISAM.
Joseph Hamilton

5

Creo que una de las principales cosas a tener en cuenta es que las versiones anteriores a MySQL 5.0 no tenían vistas, desencadenantes y procedimientos almacenados.

Más de esto se explica en la página de descarga de MySQL 5.0 .


4

@abdu

Lo principal que he encontrado que MySQL tiene sobre MSSQL es el soporte de zona horaria: la capacidad de cambiar agradablemente entre zonas horarias, respetando el horario de verano es fantástico.

Compara esto:

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                                             |
+-----------------------------------------------------------------+

a las contorsiones involucradas en esta respuesta .

En cuanto al comentario "más fácil de usar", diría que el punto es que son diferentes, y si conoce uno, habrá una sobrecarga en el aprendizaje del otro.


Además, soporte ansi correcto para agrupar por, columnas de marca de tiempo automáticas, paginación MUCHO más simple ...
Joel Coehoorn

1
El soporte de zona horaria de MySQL está significativamente roto, no creo que sea una característica útil. Hazlo en la aplicación en su lugar.
MarkR el

No he tenido ningún problema con el soporte de zona horaria, ¿podría entrar en más detalles o proporcionar un enlace, por favor?
Cebjyre

2
¿Por qué necesitarías soporte de zona horaria en la base de datos? Use UTC en todas partes y renderice en el front-end / gui usando la zona horaria local del sistema operativo.
Tiberiu-Ionuț Stan

4

Ambos son el servidor Product Sql de DBMS es una aplicación comercial, mientras que MySql es una aplicación de apertura. Ambos productos incluyen una función similar, sin embargo, el servidor sql debe usarse para una solución empresarial, mientras que mysql podría adaptarse a una implementación más pequeña. replicación, seguridad granalar y significativa, necesita un servidor sql

MySql ocupa menos espacios en el disco y usa menos memoria y CPU que el servidor SQL


3

¿Alguien tiene alguna buena experiencia con un "puerto" de una base de datos desde SQL Server a MySQL?

¡Esto debería ser bastante doloroso! Cambié las versiones de MySQL de 4.xa 5.xy varias declaraciones ya no funcionarían como solían hacerlo. El analizador de consultas se "mejoró", por lo que las declaraciones que anteriormente estaban ajustadas para el rendimiento ya no funcionarían como se esperaba.

La lección aprendida al trabajar con una base de datos MySQL de 500 GB: ¡es un tema sutil y cualquier otra cosa menos trivial!


2

@Cebjyre. El IDE si Enterprise Manager o Management Studio es mejor que cualquier cosa que haya visto hasta ahora para MySQL. Digo 'más fácil de usar' porque puedo hacer muchas cosas en MSSQL donde MySQL no tiene contrapartes. En MySQL no tengo idea de cómo ajustar las consultas simplemente mirando el plan de consulta o las estadísticas. El asistente de ajuste de índice en MSSQL toma la mayor parte de las conjeturas sobre qué índices faltan o están fuera de lugar.

Una deficiencia de MySQL es que no hay un tamaño máximo para una base de datos. La base de datos solo aumentaría de tamaño hasta que llene el disco. Imagine si este disco comparte bases de datos con otros usuarios y de repente todas sus consultas fallan porque sus bases de datos no pueden crecer. He informado de este problema a MySQL hace mucho tiempo. No creo que esté arreglado todavía.


2
Por otro lado, la consola del estudio de administración me molestó porque no respetaba deshacer correctamente (es posible tener una consulta válida que se ahoga, porque no se da cuenta de que el texto se ha actualizado) y la falta de pestañas -expansión (en comparación con el shell mysql). Hay desventajas en ambos lados.
Cebjyre

1

Al pasar algún tiempo trabajando con MySQL desde el punto de vista de sintaxis de MSSQL a MySQL, me encontré limitado en lo que podía hacer.

Hay límites bizarros para actualizar una tabla mientras se hace referencia a la misma tabla durante una actualización.

Además, ACTUALIZAR DESDE no funciona y la última vez que verifiqué tampoco admiten la sintaxis Oracle MERGE INTO. Este fue un espectáculo para mí y dejé de pensar que llegaría a cualquier lugar con MySQL después de eso.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.