工作中有个任务是把MySQL数据库导入SqlServer中,因为任务紧急,这周一直在加班做,过程非常曲折,软件重装了几遍,网上资料也查了不少,基本上所有的问题都遇到了,不过总算是弄好了,期间也学到不少东西,还是总结一下!
一.MySQL的安装和基本操作(之前完全没用过)
1.安装的是mysql-essential-5.0.51b-win32.msi,同时安装了mysql-gui-tools-5.0-r17-win32.msi(这是个图形用户化界面,这个工具据说比较强大,但是我只用到其中最基本的功能,其他还有待学习)。安装过程没什么好说的,基本是按照向导提示,但是我第一次安装的时候没有提示输入用户名和口令,直接导致连接MySQL的时候连不上,试过网上一些强制重置口令的方法,都没有成功,所以也不写出来了,后来卸载了重装就好了。
2.连接MySQL:
.进入安装目录的bin目录下,输入命令 mysql -u root -p回车,会提示输入密码,输入后,会出现mysql提示符,表明连接成功。
3.基本的命令:
1、显示当前数据库服务器中的数据库列表:
mysql> SHOW DATABASES;
2、显示数据库中的数据表:
mysql> USE 库名;
mysql> SHOW TABLES;
3、显示数据表的结构:
mysql> DESCRIBE 表名;
4、建立数据库:
mysql> CREATE DATABASE 库名;
5、建立数据表:
mysql> USE 库名 ;
mysql> CREATE TABLE
表名 (字段名 VARCHAR(20), 字段名 CHAR(1));
6、删除数据库:
mysql> DROP DATABASE 库名;
7、删除数据表:
mysql> DROP TABLE 表名;
8、将表中记录清空:
mysql> DELETE FROM 表名;
9、显示表中的记录:
mysql> SELECT * FROM 表名;
10、往表中插入记录:
mysql> INSERT INTO 表名 VALUES (”hyq”,”M”);
11、更新表中数据:
mysql-> UPDATE 表名 SET 字段名1=’a',字段名2=’b’ WHERE 字段名3=’c';
关于MySQL基本网上的介绍很多,可以查询,需要说明的是MySQL的配置文件是安装目录下的my.ini,这个文件很重要,里面存在了很多配置信息,这个文件出错很可能导致MySQL服务不能启动,这个文件在C:WINDOWS目录下也有一个,需和安装目录下的一致,修改的时候这两个都要修改。还有就是MySQL安装的时候会让选择默认的字符集,安装时如果已经明确字符集可以提前选好,可以省去很多麻烦,如果没有选择也不要紧,安装好后可以修改,关于字符集下面会专门说下。
二 SqlServer安装及注意事项
1.安装
本来安装的是SqlServer 2005 express版本,这个版本免费,但是很多功能受限制,比如导入导出数据功能就没有,只好卸载了重装SqlServer 2000,卸载了安装有时会出现问题,原因是注册表有个项没删干净,打开注册表,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager中找到PendingFileRenameOperations项目,并删除它。这样就可以清除安装暂挂项目。
还有一个问题就是xp上不好安装SqlServer2000企业版,方法如下:
1、找一张SQL server服务器版光盘,在光盘上找到目录“MSDE”并进入,运行SETUP.EXE文件,并按照程序要求进行安装。安装完成重新启动计算机。
2、运行光盘中的,AUTORUN.EXE文件,或让光盘自动运行,打开安装界面后,点击“安装SQL server 2000组件(C)”=》“安装数据库服务器(S)”这里程序将提示你“....服务器组件在此系统上不受支持,.....”点“确定”。进入新的安装界面,点击“下一步”,选择默认的 “本地计算机”=》“创建新的SQL server”=》“仅客户端工具”...,一路点击“下一步”。直至安装结束。重新启动计算机。
3、计算机名要改成全大写的,机器名在系统属性的“计算机名”里可以找到,比如取名“SERVER”,改名后,关闭“企业管理器” 。
4、到“开始”--“程序”-“Microsoft SQL Server”中打开“客户端网络实用工具”,点“别名”如果“服务器别名配置”里没有数据,我们需要手工添加,点 “添加”按钮。在“添加网络库配置”的“网络库”选项中,我们选择默认的“Named Pipes(P)”项,并为服务器取个别名“SERVER”,这时管道名称会自动添加“\\SERVER\pipe\sql\query”我们就不要管它了。点“确定”退出。
5、这一步我们要进入注册进行一下修改了,打开注册表编辑器,找到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
MSSQLServer\MSSQLServer],这一项,里面有一个键值LoginMode默认值是“1”,现在将该值改为“2”(安装MSDE时,默认的SQL Server身份验证方式为“仅 Windows"的身份验证方式,即sa用户无法验证,通过修改以上的注册表键值来将身份验证方式改为SQL Server和Windows混合验证以后,就可以用sa用户登录了)。修改完毕,重启电脑成功了。
三 MySQL数据库导入
目标是目标机的MySQL数据库导到我自己的机器上。试过三种方法,把目标机器上的数据库用phpmyadmin导出为.sql温江,然后用phpmyadmin,或者命令行导入MySQL,都不行,都是出现字符集不匹配,后来把目标机器上的数据库文件都拷贝到自己的机器上竟然可以,十分诡异,下面详细说下
1、用phpmyadmin
phpmyadmin较新的版本中有Import这个功能,老版本没有,phpmyadmin的配置就不讲了,主要是config.inc.php文件里面有不少选项,网上讲的比较多,就不重复了。
要注意的是
$cfg['Servers'][$i]['only_db'] = 'XXX';指定这个选项后,phpmyadmin中就只会出现指定的数据库了。
phpmyadmin限制上传文件的大小,默认是2M,可以通过修改配置文件 php.ini(在php的安装目录下)来指定你想上传的大小。主要是这三个参数:post_max_size、upload_max_filesize、 memory_limit,还有的说max_execution_time 和max_input_time 也需修改,不过我只改了前面的就ok了。
用phpmyadmin也可以建立数据库和数据表,这里需注意新建的时候字符集的选择必须和MySQL的一致,否则中文会出现乱码。
这种方法可以导入,但是字符集一直有问题,最后没有成功。
2、用命令,命令很简单
连接上MySQL后,选择数据库命令 use 数据库名;导入命令 source XXX.sql 这里的这个XXX.sql需要提前拷到MySQL的bin目录下,但是这种方式也是字符集问题,最后没有成功。
3.直接拷贝数据库文件
这种方法是把目标机器上的.frm,.MYD,.MYI文件拷贝到自己机器上MySQL安装目录data文件下对应数据库的文件夹中。必须保证你机器上MySQL的字符集和数据库源的MySQL字符集一致,我这里选的都是gb2312。然后用phpmyadmin访问,成功,中文也不是乱码了。
四、MySQL导入SqlServer
方法:
  1.安装mysql数据库的ODBC驱动mysql-connector-odbc-5.1.5-win32.msi(最好去官网下最新版本,否则对中文字符集支持的不好,我开始用的版本比较老,导进去之后,中文都是问号)  
       2.打开控制面板\管理工具\数据源ODBC,在用户DSN中添加一个MySQL ODBC 5.1数据源。
  3.在登录login选项卡中输入数据源名称Data Source Name,此处输入MysqlDNS;然后输入服务器Server,用户User,密码Password,输入正确后选择要导入的数据库。在连接选项connect options中根据需要设置MySql使用的端口port和字符集Character Set。
   4.打开sql server企业管理器,新建一数据库MySql。选择该数据库,单击右键选择所有任务\导入数据。
  5.选择数据源为其它(ODBC数据源),用户/系统DSN为MysqlDNS。其余根据向导进行,即可将数据从MySql数据库导入到MSSQL数据库中。
五、MySQL字符集
MySQL字符集一直比较乱,出的问题比较多,网上的解决方案也五花八门,我觉得这个主要是看rp。。。这里只简单介绍下相应的知识。
查看MySQL字符集的命令 mysql> show variables like '%char%';出现
+--------------------------+-------------------------------------+------
| Variable_name            | Value                               |......
+--------------------------+-------------------------------------+------
| character_set_client     | utf8                                |......   -- 客户端字符集
| character_set_connection | utf8                                |......
| character_set_database   | utf8                                |......   -- 数据库字符集
| character_set_filesystem | binary                              |......
| character_set_results    | utf8                                |......
| character_set_server     | utf8                                |......   -- 服务器字符集
| character_set_system     | utf8                                |......
| character_sets_dir       | D:\MySQL Server 5.0\share\charsets\ |......
+--------------------------+-------------------------------------+------
这里除了character_set_system     没办法改以外,其他都可以用命令修改,如SET character_set_client='gbk';不过这种修改重启MySQL服务器以后就恢复成原来的了,需要到my.ini中修改default-character-set(有两处都要改)。
字符集不匹配导致中文乱码的问题比较多,网上说的解决方案也不定奏效,可以多修改几种编码方案都试一下,记得让MySQL,phpmyadmin,还有数据库的字符集一直,不确定字符集可以用上面介绍的命令查看。
总结:以上是完成MySQL导入SqlServer时碰到的问题,数据库由于配置较多,有时候会出现很诡异的问题,大家设置或者修改配置时一定得记得自己改了什么,还要把原始的那份备份下,以防出现意外错误。