选择MySQL还是SQL Server

来源:互联网 发布:英文版办公软件 编辑:程序博客网 时间:2024/05/22 09:03

对于程序开发人员而言,目前使用最流行的两种后台数据库即为MySQL and SQL Server。这两者最基本的相似之处在于数据存储和属于查询系统。你可以使用SQL来访问这两种数据库的数据,因为它们都支持ANSI-SQL。还有,这两种数据库系统都支持二进制关键词和关键索引,这就大大地加快了查询速度。同时,二者也都提供支持XML的各种格式。

除了在显而易见的软件价格上的区别之外,这两个产品还有什么明显的区别吗?在这二者之间你是如何选择的?让我们看看这两个产品的主要的不同之处,包括发行费用,性能以及它们的安全性。

根本的区别是它们遵循的基本原则
二者所遵循的基本原则是它们的主要区别:开放vs保守。SQL服务器的狭隘的,保守的存储引擎与MySQL服务器的可扩展,开放的存储引擎绝然不同。虽然你可以使用SQL服务器的Sybase引擎,但MySQL能够提供更多种的选择,如MyISAM, Heap, InnoDB, and Berkeley DB。MySQL不完全支持陌生的关键词,所以它比SQL服务器要少一些相关的数据库。同时,MySQL也缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能。

发行费用:MySQL不全是免费,但很便宜
当提及发行的费用,这两个产品采用两种绝然不同的决策。对于SQL服务器,获取一个免费的开发费用最常的方式是购买微软的Office或者Visual Studio的费用。但是,如果你想用于商业产品的开发,你必须还要购买SQL Server Standard Edition。学校或非赢利的企业可以不考虑这一附加的费用。

性能:先进的MySQL   
纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式MyISAM。MyISAM 数据库与磁盘非常地兼容而不占用过多的CPU和内存。MySQL可以运行于Windows系统而不会发生冲突,在UNIX或类似UNIX系统上运行则更好。你还可以通过使用64位处理器来获取额外的一些性能。因为MySQL在内部里很多时候都使用64位的整数处理。Yahoo!商业网站就使用MySQL作为后台数据库。

当提及软件的性能,SQL服务器的稳定性要比它的竞争对手强很多。但是,这些特性也要付出代价的。比如,必须增加额外复杂操作,磁盘存储,内存损耗等等。如果你的硬件和软件不能充分支持SQL服务器,我建议你最好选择其他如DBMS数据库,因为这样你会得到更好的结果。

这两者数据库都能够在.NET或J2EE下运行正常,同样,都能够利用RAID。

安全功能
 

MySQL有一个用于改变数据的二进制日志。因为它是二进制,这一日志能够快速地从主机上复制数据到客户机上。即使服务器崩溃,这一二进制日志也会保持完整,而且复制的部分也不会受到损坏。

在SQL服务器中,你也可以记录SQL的有关查询,但这需要付出很高的代价。

安全性
这两个产品都有自己完整的安全机制。只要你遵循这些安全机制,一般程序都不会出现什么问题。这两者都使用缺省的IP端口,但是有时候很不幸,这些IP也会被一些黑客闯入。当然,你也可以自己设置这些IP端口。

恢复性:先进的SQL服务器
恢复性也是MySQL的一个特点,这主要表现在MyISAM配置中。这种方式有它固有的缺欠,如果你不慎损坏数据库,结果可能会导致所有的数据丢失。然而,对于SQL服务器而言就表现得很稳键。SQL服务器能够时刻监测数据交换点并能够把数据库损坏的过程保存下来。

根据需要决定你的选择
对于这两种数据库,如果非要让我说出到底哪一种更加出色,也许我会让你失望。以我的观点,任一对你的工作有帮助的数据库都是很好的数据库,没有哪一个数据库是绝对的出色,也没有哪一个数据库是绝对的差劲。我想要告诉你的是你应该多从你自己的需要出发,即你要完成什么样的任务?而不要单纯地从软件的功能出发。

如果你想建立一个.NET服务器体系,这一体系可以从多个不同平台访问数据,参与数据库的管理,那么你可以选用SQL服务器。如果你想建立一个第三方站点,这一站点可以从一些客户端读取数据,那么MySQL将是最好的选择。

原文:http://htm.winsteps.net/database/331.htm

MySQL和.Net2.0配合使用

MySql现在的最新版本是5.x.第一次接触它是在大二的时候,用php,那时好像还是4.x版本。

Mysql5增加很多新的功能,开始支持:存储过程、触发器、视图、信息架构视图等...

MySql在安装时一如既往的比较复杂,往往就是一个失败的提示,没有什么其它提示原因。


这是一篇文章,比较MySql和SqlServer的,http://htm.winsteps.net/database/331.htm

MySql中文网站http://www.mysql.cn/上资料很少,大多是些安装帮助。
要查资料还是去MySql的网站
http://www.mysql.com/

MySql现在有提供的各种连接工具(http://dev.mysql.com/downloads/connector/),.net下可以用的有Connector/ODBC和Connector/Net。

ODBC连接效率可能稍低,最好还是用Net直接的连接
这篇文章介绍了各种连接方法
http://www.mysql.com/news-and-events/press-release/release_2002_10.html

1:ODBC连接
      现在的版本是3.51,安装之后,可以这样操作:
               // string conStr = "DRIVER = {MySQL ODBC 3.51 Driver}; SERVER = localhost; DATABASE =test; UID = root; PASSWORD=;";

             //string conStr = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=test;USER=root;PASSWORD=;OPTION=3;";
            string conStr = "provider = MySQL ODBC 3.51 Driver; SERVER = localhost; DATABASE =test; UID = root; PASSWORD=;";

            try
            {
                OleDbConnection  connection = new OleDbConnection(conStr);
               connection.Open();
            }
            catch(Exception ex)
            {
              MessageBox.Show(ex.Message);
            }
2:Net连接:
     MySQL Connector Net 1.0.7:有net1.0;net.1;net2.0;mono1.0四个版本的connector。免费
     CoreLab.MySql 3.5:这是个商业的版本,试用期30天。

    下边的代码是使用MySQL Connector Net 的例子。注意:他的Parameter的前缀是“?”而不是“@”。这个问题比较特殊。CoreLab里面的Parameter的前缀就是“@”.
      string connStr = String.Format("server={0};user id={1}; password={2}; database={3}; pooling=false;port=3308", "localhost", "root", "", "test");
            try
            {
                MySqlConnection myConn = new MySqlConnection(connStr);
                myConn.Open();
                MySqlCommand cmd = myConn.CreateCommand();
               
                cmd.Parameters.Add("?DocName", MySqlDbType.VarChar, 50);
                cmd.Parameters[0].Value = "test by code";
                cmd.Parameters[0].SourceColumn = "DocName";
                cmd.CommandText = "update t_docs set DocName=?DocName where DocId=4";
                cmd.ExecuteNonQuery();
这是使用一个ORM时设置provider的例子
CustomProvider mysqlProvider = new CustomProvider("MySql.Data", "MySql.Data.MySqlClient.MySqlConnection", "MySql.Data.MySqlClient.MySqlDataAdapter");
                        mysqlProvider.StartDelimiter = "";//default is "/""
                        mysqlProvider.EndDelimiter = "";//default is "/""
                        mysqlProvider.ParameterPrefix = "?";//设置参数前缀
                        mysqlProvider.SelectPageQuery = "SELECT * LIMIT {0} OFFSET {1}";//设置分页算法
                        mysqlProvider.IdentityQuery = "SELECT LAST_INSERT_ID()";//设置获取刚刚插入记录Id的函数

3:OLE连接:
      现在还没有来自官方的支持。

在vs2005中,直接引用for .net2.0版本的dll即可。至于那个商业版,就得费些功夫了,需要一个许可文件(拖动一个Conection组件到Form上就能自动创建该许可)

附,连接字符串可以到这里查询http://www.connectionstrings.com/, 够全的了。