Diferenças entre MySQL e SQL Server [fechado]

144

Sou desenvolvedor do ASP.NET que utilizou Microsoft SQL Serverpara todas as minhas necessidades de banco de dados (tanto no trabalho quanto em projetos pessoais).

Estou pensando em experimentar a pilha LAMP para alguns dos meus projetos pessoais.

Quais são algumas das principais diferenças entre MySQLe SQL Server? O uso de procedimentos armazenados é uma prática comum MySQL?

Algum conselho ou recursos que você recomendaria para me ajudar com a troca?

Para aqueles que têm experiência com os dois, faltam alguns recursos MySQL?

pecuarista
fonte

Respostas:

139

Uma coisa que você deve observar são as diferenças bastante graves na maneira como o SQL Server e o MySQL implementam a sintaxe SQL.

Aqui está uma boa comparação de diferentes implementações de SQL .

Por exemplo, dê uma olhada na seção top-n. No MySQL:

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

No SQL Server (T-SQL):

SELECT TOP 3 WITH TIES *
FROM person
ORDER BY age ASC
Jeff Atwood
fonte
27
e Oracle é diferente também: SELECT * FROM (idade seleto de fim pessoa por asc atrás) onde rownum <= 3 Volte ANSI SQL, tudo é perdoado :)
gbjbaanb
9
Apenas cruzei com isso. Ler sobre todas as diferenças me faz estremecer. O básico é o mesmo (pelo menos em termos de entendimento), mas os detalhes são muito, muito diferentes.
JasCav
21
talvez um comentário idiota, mas por que não pode haver uma linguagem sql ?? ... existe html diferente ?? ... então por que não 1 sql.
greaterKing
4
O @geavyKing HTML é uma estrutura e um padrão definidos por um comitê / consórcio, o SQL .. não é, é apenas uma linguagem de script e o único proprietário é o desenvolvedor do intérprete. É como o Javascript, de certa forma, todo navegador tem seu próprio mecanismo JS e sua própria maneira de interpretar o script. É apenas por pura pressão da comunidade que os esforços para levar essa linguagem a algum tipo de solidariedade foram realizados. Mas o homem que eu gostaria que eles estivessem todos extremamente semelhante com apenas pequenas diferenças
RedactedProfile
2
T-SQL traduz em Transact-SQL;) Sql Server inclui a linguagem (T-SQL), mas é um software como um todo, com interface gráfica, manipulação de solicitações localmente e através da rede etc.
Botond Bertalan
48

Muitos comentários aqui parecem mais argumentos religiosos do que declarações da vida real. Eu trabalhei por anos com MySQL e MSSQL e ambos são bons produtos. Eu escolheria o MySQL principalmente com base no ambiente em que você está trabalhando. A maioria dos projetos de código aberto usa o MySQL, portanto, se você for nessa direção, o MySQL é sua escolha. Se você desenvolver algo com o .Net, eu escolheria o MSSQL, não porque seja muito melhor, mas apenas porque é isso que a maioria das pessoas usa. Atualmente, estou atualmente em um projeto que usa o ASP.NET com MySQL e C #. Funciona perfeitamente bem.

Remy
fonte
3
A rigor, você acha que não há nada como o MS SQL. O que existe é "MS SQL Server".
Inquebrável
Tenho certeza que você sabe mais do que eu. Eu sou apenas um iniciante, por favor, deixe-me saber se estou enganado? Existe algo exato como o MS SQL?
Inquebrável
2
Não tenho certeza do que você está perguntando?
Remy
3
Está correto. Microsoft SQL Server 2012 ou qualquer versão que você usar.
Remy
5
Atualmente, a programação é sobre siglas. Vamos dar o exemplo de você falando sobre a Lamp Stack. Muitas pessoas provavelmente dirão apenas LAMP ou WAMP. Da mesma forma, em vez de dizer Microsoft SQL Server nós fizemo-lo MS SQL Server para MS SQL para MSSQL
ytpillai
23

Não acredito que ninguém mencionou que o MySQL não suporta instruções Common Table Expressions (CTE) / "with". É uma diferença bastante irritante.

ely
fonte
Eu usei tanto CTEs quanto tabelas temporárias / variáveis. Qual seria o benefício de usar um CTE em relação aos dois últimos?
Jared
8
@Jared O uso de CTEs mantém o código legível, porque você não precisa definir uma tabela temporária e seus tipos de coluna. Ao usar o cte, você obtém um conhecimento do tipo e nome da coluna, mesmo que você não os tenha especificado.
Aleks
9
A recursão é um benefício que precisa ser mencionado.
Faiz
2
Mysql 8 suporta CTE
Ivanzinho
Então o mysql agora também recebe doces sintáticos.
TheLegendaryCopyCoder
15

É mais provável que o MySQL tenha problemas de corrupção de banco de dados e não os corrige automaticamente quando eles acontecem. Eu trabalhei com o MSSQL desde a versão 6.5 e não me lembro de um problema de corrupção do banco de dados que deixou o banco de dados offline. Nas poucas vezes em que trabalhei com o MySQL em um ambiente de produção, um problema de corrupção do banco de dados deixou todo o banco de dados offline até executarmos a coisa mágica "por favor, corrija meu índice corrompido" na linha de comando.

O sistema de transações e registro de diário do MSSQL, na minha experiência, lida com praticamente qualquer coisa - incluindo um ciclo de energia ou falha de hardware - sem corrupção do banco de dados e, se algo ficar bagunçado, ele o corrige automaticamente.

Esta foi a minha experiência e ficaria feliz em saber que isso foi corrigido ou que estávamos fazendo algo errado.

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

Jon Galloway
fonte
2
myIsam destina-se a respostas realmente rápidas, não forçou a verificação de chave estrangeira para ser mais rápida. Tente usar o mecanismo InnoDB se estiver fazendo algo mais sério. Eu tive alguns problemas realmente desagradáveis ​​com o MS Access, e não posso perdoá-los por tal irresponsabilidade, por isso não favoreci nenhum banco de dados da MS, deixei-os fazer SOs e presto negócios sérios à comunidade de código aberto ... embora você não possa ser Certifique-se de qualquer coisa desde que a Oracle tinha ultrapassado MySQL ..
ante.sabo
8
É justo, mas é bobagem ignorar os bancos de dados da Microsoft com base no Access. O acesso é um banco de dados da área de trabalho e não tem nada a ver com o SQL Server. Você sabe que o StackOverflow é executado no SQL Server, certo?
Jon Galloway
@ JonGalloway: Olá, sou iniciante. Eu só quero saber estritamente que temos algo como MS SQL. Eu acho que o que existe é o MS SQL Server. Você pode me esclarecer sobre isso. Pode ser uma palavra comum, portanto você pode usá-la como MS SQL e faria sentido para todos. Mas como sou iniciante, estou meio que fixado em terminologias para entender o conceito. Por favor, deixe-me saber o que você está falando é MS SQL ou MS SQL Server?
Inquebrável
1
Quando as pessoas dizem MSSQL, TSQL, geralmente significam a linguagem SQL ou Transaction SQL (TSQL) enviada com o produto Microsoft SQL Server. Isso não deve ser tão difícil de descobrir. Leia em en.wikipedia.org/wiki/Microsoft_SQL_Server
Faiz
@JonGalloway e aqui está a referência: stackoverflow.blog/2008/09/what-was-stack-overflow-built-with
Moayad Hani Abu Rmilah
7

Francamente, não consigo encontrar um único motivo para usar o MySQL em vez do MSSQL. O problema antes era caro, mas o SQL Server 2005 Express é gratuito e existem muitas empresas de hospedagem na web que oferecem hospedagem completa com servidor sql por menos de US $ 5,00 por mês.

O MSSQL é mais fácil de usar e possui muitos recursos que não existem no MySQL.

Abdu
fonte
2
Eu acho que o preço é a única razão real para escolher o MySQL ao invés do MSSQL. Certamente, existe alguma hospedagem barata do MSSQL, mas é rara e muitas vezes severamente limitada ao armazenamento.
Craig
21
Eu diria que o licenciamento é uma boa razão para usar o MySQL.
Dr. Mike
3
Group_concat e REGEXP são razões mais do que suficientes para usar o MySQL sobre SQL Server (mesmo se as duas licenças foram trocados)
Michele
1
Outra razão pela qual eu usaria o MySQL seria que, se você quiser um banco de dados local e optar pelo MS SQL Server, terá que ter uma máquina Windows funcionando, o que inclui mais custos de licenciamento ... especialmente se você quiser manter tudo atualizado
Pedro Braz
2
Voto negativo, porque acho que é tendencioso e obviamente impreciso dizer que não há uma única razão para usar o MySQL sobre o MSSQL. O SQL Server Express tem sérias limitações que o MySQL não possui, e nenhum projeto sério vai usar o Express, significando que o problema de custo ainda é muito válido. A maioria das maiores empresas do mundo escolheu o MySQL / MariaDB em vez do MSSQL. Pessoalmente, eu também, não apenas pela questão de licenciamento e custo, mas porque, na minha experiência, o MySQL é muito mais fácil de trabalhar. O MySQL tende a funcionar, enquanto eu me pego brigando com o MSSQL ocasionalmente para fazer o que eu quero.
dallin
7

Tudo no MySQL parece ser feito mais próximo do metal que no MSSQL, e a documentação trata dessa maneira. Especialmente para otimização, você precisará entender como os índices, a configuração do sistema e o otimizador interagem sob várias circunstâncias.

O "otimizador" é mais um analisador. No MSSQL, seu plano de consulta geralmente é uma surpresa (geralmente boa, às vezes não). No MySQL, ele praticamente faz o que você pediu, do jeito que você esperava. O que significa que você precisa ter uma compreensão profunda das várias maneiras pelas quais isso pode ser feito.

Não construído em torno de um bom modelo de TRANSACTION (mecanismo MyISAM padrão).

A configuração do sistema de arquivos é seu problema.

Toda a configuração do banco de dados é seu problema - especialmente vários tamanhos de cache.

Às vezes, parece melhor pensar nisso como um isam ad-hoc e glorificado. Codd e Date não têm muito peso aqui. Eles diriam isso sem vergonha.

dkretz
fonte
3
O MySQL moderno padroniza o Innodb, apenas um ponto de esclarecimento. Acho que depois de 5.1 ou mais. O Innodb suporta transações, chaves estrangeiras e bloqueio no nível da linha em oposição ao bloqueio no nível da tabela com o MyISAM.
Joseph Hamilton
5

Eu acho que uma das principais coisas a observar é que as versões anteriores ao MySQL 5.0 não tinham visualizações, gatilhos e procedimentos armazenados.

Mais sobre isso é explicado na página de download do MySQL 5.0 .

Jon Limjap
fonte
4

@abdu

A principal coisa que eu descobri que o MySQL tem sobre o MSSQL é o suporte ao fuso horário - a capacidade de mudar muito bem entre os fusos horários, respeitando o horário de verão, é fantástica.

Compare isto:

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

para as contorções envolvidas nesta resposta .

Quanto ao comentário 'mais fácil de usar', eu diria que o ponto é que eles são diferentes e, se você conhece um, haverá uma sobrecarga no aprendizado do outro.

Cebjyre
fonte
Além disso, o apoio ansi correta para o grupo por, colunas timestamp automáticas, paginação muito mais simples ...
Joel Coehoorn
1
O suporte ao fuso horário do MySQL está significativamente quebrado, não acho que seja um recurso útil. Faça isso no aplicativo.
MarkR 23/11/2008
Não tive problemas com o suporte ao fuso horário. Você poderia entrar em mais alguns detalhes ou fornecer um link, por favor?
Cebjyre
2
Por que você precisaria de suporte de fuso horário no banco de dados? Use UTC em qualquer lugar e renderize no front end / gui usando o fuso horário local do sistema operacional.
Tiberiu-Ionuţ Stan
4

O produto inclui recurso semelhante, no entanto, o servidor sql deve ser usado para uma solução corporativa, enquanto o mysql pode ser adequado a uma implementação menor. Se você precisar de recursos como recuperação, replicação, segurança granalar e significativa, você precisa de um servidor sql

O MySQL ocupa menos espaço no disco e usa menos memória e CPU do que o sql server

Principe
fonte
3

Alguém tem alguma boa experiência com uma "porta" de um banco de dados do SQL Server para o MySQL?

Isso deve ser bastante doloroso! Troquei as versões do MySQL de 4.x para 5.xe várias instruções não funcionariam mais como costumavam. O analisador de consultas foi "aprimorado" para que as instruções previamente ajustadas para desempenho não funcionassem mais como o esperado.

A lição aprendida ao trabalhar com um banco de dados MySQL de 500 GB: é um tópico sutil e qualquer outra coisa, menos trivial!

dlinsin
fonte
2

@Cebjyre. O IDE, seja o Enterprise Manager ou o Management Studio, é melhor do que qualquer coisa que eu tenha visto até agora no MySQL. Eu digo 'mais fácil de usar' porque posso fazer muitas coisas no MSSQL onde o MySQL não tem contrapartes. No MySQL, eu não tenho idéia de como ajustar as consultas simplesmente olhando o plano de consulta ou as estatísticas. O assistente de ajuste de índice no MSSQL realiza a maior parte do trabalho de adivinhação sobre quais índices estão ausentes ou extraviados.

Uma desvantagem do MySQL é que não há tamanho máximo para um banco de dados. O banco de dados aumentaria de tamanho até preencher o disco. Imagine se este disco estiver compartilhando bancos de dados com outros usuários e, de repente, todas as suas consultas falharem porque seus bancos de dados não podem crescer. Eu relatei esse problema ao MySQL há muito tempo. Acho que ainda não está consertado.

Abdu
fonte
2
Por outro lado, fiquei incomodado com o fato de o console do estúdio de gerenciamento não respeitar o desfazer corretamente (é possível ter uma consulta válida em que ele se engasga, porque não percebe que o texto foi atualizado) e a falta de tabulação -expansion (comparado ao mysql shell). Há desvantagens de ambos os lados.
Cebjyre
1

Passando algum tempo trabalhando com o MySQL da sintaxe do MSSQL para o MySQL POV, fiquei me limitando ao que podia fazer.

Existem limites de atualização para atualizar uma tabela e atualizar a mesma tabela durante uma atualização.

Além disso, UPDATE FROM não funciona e da última vez que verifiquei, eles também não suportam a sintaxe Oracle MERGE INTO. Essa foi uma parada para mim e eu parei de pensar que chegaria a algum lugar com o MySQL depois disso.


fonte