147

我是一名ASP.NET开发人员,他已经使用Microsoft SQL Server了我所有的数据库需求(无论是在工作中还是个人项目中)。

我正在考虑为我的一些个人项目尝试LAMP堆栈。

MySQL和之间的主要区别是SQL Server什么?使用存储过程是一种常见的做法MySQL吗?

您有什么建议或资源可以帮助我进行转换吗?

对于两者都有经验的人,是否缺少任何功能MySQL

4

12 回答 12

141

您必须注意的一件事是 SQL Server 和 MySQL 实现 SQL 语法的方式存在相当严重的差异。

这是不同 SQL 实现的一个很好的比较

例如,看一下 top-n 部分。在 MySQL 中:

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

在 SQL Server (T-SQL) 中:

SELECT TOP 3 WITH TIES *
FROM person
ORDER BY age ASC
于 2008-08-14T03:17:18.153 回答
49

这里的很多评论听起来更像是宗教论点,而不是现实生活中的陈述。我已经使用 MySQL 和 MSSQL 多年,它们都是很好的产品。我会主要根据您正在使用的环境选择 MySQL。大多数开源项目都使用 MySQL,所以如果你朝这个方向发展,MySQL 是你的选择。如果您使用 .Net 开发一些东西,我会选择 MSSQL,不是因为它更好,而是因为这是大多数人使用的。我实际上目前正在使用带有 MySQL 和 C# 的 ASP.NET 的项目。它工作得很好。

于 2010-09-01T07:41:14.790 回答
23

我不敢相信没有人提到 MySQL 不支持 Common Table Expressions (CTE) / "with" 语句。这是一个非常烦人的区别。

于 2012-10-12T19:18:08.190 回答
15

MySQL 更有可能出现数据库损坏问题,并且当它们发生时它不会自动修复它们。我从 6.5 版开始使用 MSSQL,不记得数据库损坏问题导致数据库脱机。有几次我在生产环境中使用 MySQL,数据库损坏问题导致整个数据库脱机,直到我们从命令行运行神奇的“请修复我损坏的索引”。

根据我的经验,MSSQL 的事务和日志系统几乎可以处理任何事情——包括电源循环或硬件故障——而不会损坏数据库,如果出现问题,它会自动修复。

这是我的经验,我很高兴听到这个问题已经解决或者我们做错了什么。

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

于 2008-08-20T16:28:51.663 回答
7

坦率地说,我找不到使用 MySQL 而不是 MSSQL 的单一理由。以前的问题是成本,但 SQL Server 2005 Express 是免费的,并且有许多网络托管公司提供完整的 sql server 托管服务,每月不到 5.00 美元。

MSSQL 更易于使用,并且具有 MySQL 中不存在的许多功能。

于 2008-09-09T04:51:26.853 回答
7

MySQL 中的一切似乎都比 MSSQL 更接近于金属,并且文档是这样处理的。特别是对于优化,您需要了解索引、系统配置和优化器在各种情况下如何交互。

“优化器”更像是一个解析器。在 MSSQL 中,您的查询计划通常是一个惊喜(通常是好的,有时不是)。在 MySQL 中,它几乎按照您期望的方式执行您要求它执行的操作。这意味着您自己需要对可能完成的各种方式有深入的了解。

不是围绕良好的 TRANSACTION 模型(默认 MyISAM 引擎)构建的。

文件系统设置是您的问题。

所有的数据库配置都是你的问题——尤其是各种缓存大小。

有时最好将其视为临时的、美化的伊萨姆。Codd 和 Date 在这里没有太大的分量。他们会毫不尴尬地说出来。

于 2008-11-23T21:11:29.147 回答
5

我认为需要注意的主要事情之一是 MySQL 5.0 之前的版本没有视图、触发器和存储过程。

更多内容在MySQL 5.0 下载页面中进行了解释。

于 2008-08-14T03:20:06.040 回答
4

@abdu

我发现 MySQL 对 MSSQL 的主要支持是时区支持 - 能够在时区之间很好地更改,尊重夏令时非常棒。

比较一下:

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

对于这个答案所涉及的扭曲。

至于“更容易使用”的评论,我想说的是它们是不同的,如果你知道一个,学习另一个就会有开销。

于 2008-09-09T05:22:28.587 回答
4

两者都是 DBMS 的产品 Sql server 是一个商业应用程序,而 MySql 是一个开源应用程序。两个产品都包含类似的功能,但是 sql server 应该用于企业解决方案,而 mysql 可能适合较小的实现。如果您需要恢复之类的功能,复制,粒度安全和重要,你需要sql server

MySql占用磁盘空间少,使用内存和cpu比sql server少

于 2010-03-08T14:10:06.210 回答
3

有人对从 SQL Server 到 MySQL 的数据库“端口”有任何好的经验吗?

这应该是相当痛苦的!我将 MySQL 的版本从 4.x 切换到 5.x,并且各种语句不再像以前那样工作。查询分析器已“改进”,因此以前针对性能进行了调整的语句将不再按预期工作。

从使用 500GB MySQL 数据库中吸取的教训:这是一个微妙的话题,其他任何事情都不是微不足道的!

于 2008-08-14T11:24:57.133 回答
2

@Cebjyre。无论是 Enterprise Manager 还是 Management Studio,IDE 都比我迄今为止看到的 MySQL 更好。我说“更容易使用”是因为我可以在 MSSQL 中做很多事情,而 MySQL 没有对应物。在 MySQL 中,我不知道如何通过简单地查看查询计划或查看统计信息来调整查询。MSSQL 中的索引调优向导对丢失或错位的索引进行了大部分猜测工作。

MySQL 的一个缺点是没有数据库的最大大小。数据库只会增加大小,直到填满磁盘。想象一下,如果这个磁盘正在与其他用户共享数据库,突然他们的所有查询都失败了,因为他们的数据库无法增长。我很久以前就向 MySQL 报告了这个问题。我认为它还没有修复。

于 2008-09-09T23:36:18.473 回答
1

花一些时间使用 MySQL,从 MSSQL 到 MySQL 语法 POV,我一直发现自己的能力有限。

在更新期间引用同一个表时更新表有一些奇怪的限制。

此外 UPDATE FROM 不起作用,上次我检查它们也不支持 Oracle MERGE INTO 语法。这对我来说是一个表演停止者,我不再认为在那之后我会用 MySQL 取得任何进展。

于 2008-11-23T20:09:37.350 回答