一种不错的从SQL转Mysql数据库的方法.doc

上传人:sk****8 文档编号:3503090 上传时间:2019-06-01 格式:DOC 页数:3 大小:28KB
下载 相关 举报
一种不错的从SQL转Mysql数据库的方法.doc_第1页
第1页 / 共3页
一种不错的从SQL转Mysql数据库的方法.doc_第2页
第2页 / 共3页
一种不错的从SQL转Mysql数据库的方法.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、年初的时候一直在做一个网站 MSSQL2000-MySQL5 的迁移工作,因为采用了不同的程序系统,所以主要问题在数据的迁移。由于 2 个系统数据库结构差异非常大,不方便采取SQLSERVER 里导入 MYSQL 的 ODBC 数据源的功能(也不推荐这么做,字段类型等不同点会搞死人的) ,因此就在 WINDOWS 下自己写 PHP 脚本从 SQLSERVER 里读数据,然后按照新系统的需要处理之后插入 MYSQL 里面,灵活也比较方便。实际过程主要有下面几个问题:1、数据库的连接,主要是连接 SQLSERVER。主要有 3 种方法:1.1 利用 PHP 中的 mssql_系列函数,这个与使用

2、mysql_系列函数类似,不过要打开 php.ini中相关扩展(extension=php_mssql.dll) 。1.2 利用 ODBC 连接,由于抽象了具体数据库,所以没有办法利用数据表字段名= 数组键名的特性,在针对具体应用时不是很方便,代码形式:$conn=odbc_connect(“datasource“,“username“,“password“);$sql=“select*fromnews“;$cur=odbc_exec($conn,$sql);while(odbc_fetch_row($cur)$field1=odbc_result($cur,1);$field2=odbc_r

3、esult($cur,2);/dosomething 1.3 使用 PDO-PHP5 中加入数据对象抽象层,作为官方推出的数据访问接口,优点有很多,比如支持参数绑定以防止 SQL 注入;对于不同数据库加载不同驱动即可,程序代码是一致的,便于移植等等,相信应该是大势所趋。不过由于用了 PHP5 全新的面向对象特性,需要 PHP5 的支持,5.1 可以直接使用,5 需要装 PECL,另外还要修改 PHP.ini,增加:extension=php_pdo_mysql.dll 和 extension=php_pdo_mssql.dll,实际代码如下:try$DBH=newPDO(“mssql:dbna

4、me=XXX;host=localhost“, “root“,“password“);/ConnecttoDBcatch(PDOException$e)print“Error!:“.$e-getMessage();/ErrorMessagedie();$stmt=$DBH-prepare(“SELECT*FROMnews“);/StmtHandle$stmtif($stmt-execute()while($row=$stmt-fetch()/dosomething$stmt2=$mssql-prepare(“INSERTINTOnews (title,author)VALUES(:title,

5、:author)“);$stmt2-bindParam(:title,$title);$stmt2-bindParam(:author,$author);$stmt2-execute();$DBH=null;/CloseConnection 这里要提醒下的是 MSSQL 里面是没有 MYSQL 中 LIMIT 这个语法的。 2、TEXT 字段被截断的问题。上面尝试了 3 种连接数据库方法,是因为当初连上 MSSQL 后 SELECT 出来的数据总是只有 4K 长度,以为是连接方式限制导致的,所以换了几种都是这样,最后查了资料才知道,是 php.ini 里面这 2 句配置的问题:;Validra

6、nge0-2147483647.Default=4096.mssql.textlimit=4096;Validrange0-2147483647.Default=4096.mssql.textsize=4096 把 4096 改成-1(代表无限制)即可,也可以使用 mssql_query(“SETTEXTSIZE65536“);来实现。3.两种数据库字段类型不同的问题有 2 个地方需要讲一下,一个是字段支持最大长度要注意,以免插入数据库时候被截断,另外一个就是日期格式的问题了,我比较喜欢用 UNIX时间戳。在连 MSSQL 时候可以用“selectunix_timestamp(created)

7、fromnews“来实现 MSSQL里面 DATETIME 到 MYSQL 里时间戳的转换。不过迁移时候一次要提取表中所有字段,像上面这种方法就没有简单的“select*fromnews“ 简洁,需要罗列所有字段。实际可以直接SELECT 出来,得到的是一个字符串,比如在 MSSQL 里面是 2006-01-0112:01,取出来的字符串是“2006 一月 0112:01“(有些奇怪,不知道为什么会产生中文) 。用下面这个函数可以转换成时间戳:functionConvertTime($timestring)if($timestring=null)return 0;$time=explode(“

8、,$timestring);$year=$time0;switch($time1)case“一月“:$month=“1“;break;case“二月“:$month=“2“;break;case“三月“:$month=“3“;break;case“四月“:$month=“4“;break;case“五月“:$month=“5“;break;case“六月“:$month=“6“;break;case“七月“:$month=“7“;break;case“八月“:$month=“8“;break;case“九月“:$month=“9“;break;case“十月“:$month=“10“;brea

9、k;case“十一月“:$month=“11“;break;case“十二月“:$month=“12“;break;default:break;$day=$time2;$h=0;$m=0;$s=0;if(!empty($time3)$time2=explode(“:“,$time3);$h=$time20;$i=$time21;/returndate(“Y-m-dH:i:s“,mktime($h,$i,$s,$month,$day,$year);returnmktime($h,$i,$s,$month,$day,$year);最后转换脚本写完了可以在 CMD 窗口里面用 php.exeabc.php 来执行,这种方式是没有超时时间的,适合迁移大批量数据。基本上就是这些内容,希望对大家有帮助。 Update(06/05/05):关于时间戳的转换,在 php.ini 中加上mssql.datetimeconvert=Off后就能得到类似 2006-01-0112:01 不带有中文的格式了。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。