从sql抽到mysql_找到一种不错的从SQLServer转成Mysql数据库的方法
找到一种不错的从SQLServer转成Mysql数据库的方法
2021-01-23 12:34:084
年初的时候一直在做一个网站MSSQL2000->MySQL5的迁移工作,因为采用了不同的程序系统,所以主要问题在数据的迁移。由于2个系统数据库结构差异非常大,不方便采取SQLSERVER里导入MYSQL的ODBC数据源的功能(也不推荐这么做,字段类型等不同点会搞死人的~),因此就在WINDOWS下自己写PHP脚本从SQLSERVER里读数据,然后按照新系统的需要处理之后插入MYSQL里面,灵活也比较方便。实际过程主要有下面几个问题:
1、数据库的连接,主要是连接SQLSERVER。主要有3种方法:
1.1利用PHP中的mssql_系列函数,这个与使用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_result($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:dbname=XXX;host=localhost",
"root","password");//ConnecttoDB
}catch(PDOException$e){
print"Error!:".$e->getMessage();//ErrorMessage
die();
}
$stmt=$DBH->prepare("SELECT*FROMnews");//StmtHandle$stmt
if($stmt->execute()){
while($row=$stmt->fetch()){
//dosomething
}
}
$stmt2=$mssql->prepare("INSERTINTOnews
(title,author)VALUES(:title,: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句配置的问题:
;Validrange0-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)fromnews"来实现MSSQL里面DATETIME到MYSQL里时间戳的转换。不过迁移时候一次要提取表中所有字段,像上面这种方法就没有简单的"select*fromnews"简洁,需要罗列所有字段。实际可以直接SELECT出来,得到的是一个字符串,比如在MSSQL里面是2006-01-0112:01,取出来的字符串是"2006一月0112:01"(有些奇怪,不知道为什么会产生中文)。用下面这个函数可以转换成时间戳:
functionConvertTime($timestring){
if($timestring==null){
return0;
}
$time=explode("",$timestring);
$year=$time[0];
switch($time[1]){
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";break;
case"十一月":$month="11";break;
case"十二月":$month="12";break;
default:break;
}
$day=$time[2];
$h=0;
$m=0;
$s=0;
if(!empty($time[3])){
$time2=explode(":",$time[3]);
$h=$time2[0];
$i=$time2[1];
}
//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不带有中文的格式了。
点击这里复制本文地址
以上内容由聚米学院网友整理呈现,如对侵犯您的权益,请联系邮箱:fzsbm@qq.com
支持Ctrl+Enter提交
从sql抽到mysql_找到一种不错的从SQLServer转成Mysql数据库的方法相关推荐
- mysql数据库加密设备_一种基于MySQL数据库加密方法与流程
本发明涉及数据库加密技术技术领域,具体的讲涉及一种基于MySQL数据库加密方法. 背景技术: 聚通达DBSecurity是一款基于透明加密技术的数据防泄漏产品,该产品能够实现对数据库中的敏感数据加密存 ...
- Java框架抽离的一些经历1:MYSQL数据库安装和 Oracle转换成Mysql数据库
本篇记录独自抽离部署一个java项目,方便以后查阅参考. 开发语言:JSP 部署项目环境:JDK1.8 + Mysql8.023 开发工具:IDEA 代码同步工具:SVN 一.数据库 之前数据库使用的 ...
- sqlserver2000换成mysql_将Microsoft SQL Server 2000数据库转换成MySQL数据库
1. 下载并安装MyODBC.(如果是XP请下载5.3的旧版本,8.x的新版本运行有问题) 2. 创建一个空的MySQL数据库. 3. 在Windows >> 控制面板 >> ...
- 手动备份MySQL数据库_8种手动和自动备份MySQL数据库的方法
作为流行的开源数据库管理系统,MySQL的使用者众多,为了维护数据安全性,数据备份是必不可少的.本文就为大家介绍几种适用于企业的数据备份方法. 使用MySQLDump进行MySQL备份 mysqldu ...
- 修改mysql数据库名方法_安全快速修改Mysql数据库名的5种方法
1. RENAME DATABASE db_name TO new_db_name 这个..这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了. 据说有可能丢失数据.还是不要用的好 ...
- 华夏mysql新建数据库_华夏名网虚拟主机不通过phpMyAdmin,将.sql备份导入MySQL数据库的方法...
将.SQL数据库备份文件导入MYSQL数据库 1.登录 "会员中心"->"产品管理"->"我的主机"->"管理& ...
- 几种导入导出mysql数据库的方法(建议收藏)
目录: 通过命令导出.导入mysql数据库 通过管理软件navicat 通过phpmyadmin (一)通过命令导出.导入mysql数据库 1.导出命令 (1)导出数据库 mysqldump -uro ...
- sqlserver文件转mysql_怎样将Sqlserver数据库转成mysql数据库
手上有一个网站之前是用asp.net做的,所使用的数据库是sqlserver,现在打算用PHP+MYSQL架构.因原来的站点有一定排名,直接改版的话,会导致产生很多错误页,网站排名和收录结果要恢复过来 ...
- xml文件导入mysql_如何使用XML_LOAD()将XML文件导入MySQL数据库表;功能?mysql-问答-阿里云开发者社区-阿里云...
我有一个看起来像这样的XML文件: 539 Name Surname email.domain.com 2011-04-02 13:30:00 2011-04-02 18:15:00 1,2,4,5, ...
最新文章
- python代理爬取存入csv文件
- 【网易云信招聘啦】216位攻城狮,呼唤7个好基友
- maven 加入json-lib.jar 报错 Missing artifact net.sf.json-lib:json-lib:jar:2.4:compile
- Kuroni and Impossible Calculation CodeForces - 1305C(鸽巢原理)
- 应用服务器——tomcat架构分析
- BZOJ 2288: 【POJ Challenge】生日礼物 优先队列+贪心+链表
- mysql 查询关键词顺序
- CNKI翻译助手-连接数据库失败
- 我没有时间 I Don't Have Time?
- 步数精灵v4.0霸占好友排行榜首位 安卓版
- ZDM按横断面水位线河道开挖
- 我的淘宝花名“九霄”
- 项目沟通和干系人管理
- 小程序图表wx-chart
- 生物学中的云计算和大数据
- Python基础——修改Python字典中的key(键)
- FTP建议使用教程——以Xftp7为例
- 【第十八篇】商城系统-订单中心设计解决方案
- 网络爬虫十三-队列处理
- zabbix添加邮件报警机制