海妖 发表于 2015-1-16 20:10:34

绝无经由的谈谈数据从sql server数据库导进mysql数据库的体验

有的时候,一些缺失的功能可以通过别的办法来实现,例如,在MySQL4.1以前,你可以通过使用join方法来替代子查询的功能。在MySQL5.0中,大多数关系型数据库所要求的功能已经都具备。因事情必要,要将寄存在sqlserver数据库中的数据全体导进到MySQL数据库中,在网上汇集相干材料,找到两种办法,如今分离谈谈对他们的意见。

第一种是安装mysqlODBC,使用sqlserver的导出功效,选择mysql数据源,举行数据的间接导出,这类办法很烦琐,可是针对实践使用有良多坏处,最次要表现就是数据范例成绩,起首,sqlserver数据库中
的ntext,image等数据范例的数据没法间接写进到mysql数据库中,听说只需略加修改就能够,惋惜偶这只菜鸟还没想到怎样修改,其次,由于偶在mysql中的数据库计划中将工夫都设成int型(保留的是工夫戳),以是在数据导过去后,就会呈现抵触,再次,这类办法天生的mysql数据表的字段范例都不很符合,以是此种办法我以为不克不及倡始。

第二种是使用php或asp剧本来完成数据的导进功效,这类办法必要编写程序,但天真性年夜,操纵也不是那末坚苦,统统都尽在你的把握当中,现复杂先容一下该办法
条件前提是你的mysql情况已搭建好了,先建好方针数据库,再将一切的表布局用sql语句天生,如今万事具有,只缺数据了。

能够经由过程上面的php剧本来完成sqlserver中mydb数据库的user表中数据向mysql中mydb数据库导进
<?
$cnx=odbc_connect(web,admin,123456);//web是sqlserver中mydb的数据源名,admin是会见mydb的用户名,123456是会见mydb的暗码
$cur=odbc_exec($cnx,select*fromuser);//翻开sqlserver中mydb数据库的user表
$num_row=0;
$conn=mysql_pconnect("localhost","root","123456");//毗连mysql
@mysql_select_db(mydb,$conn)or

die("没法毗连到数据库,请与办理员接洽!");//翻开mysql的mydb数据库
while(odbc_fetch_row($cur))//从sqlserver的mydb库中的user表逐条掏出数据,假如对数据举行选择,可在后面的select语句中加上前提判别
{
$num_row++;
$field1=odbc_result($cur,1);//这里的参数i(1,2,3..)指的是纪录会合的第i个域,你能够有所选择地举行拔取,fieldi失掉对应域的值,然后你能够对fieldi举行操纵
$field2=odbc_result($cur,2);
$field3=odbc_result($cur,3);
$field4=odbc_result($cur,4);
$field5=odbc_result($cur,5);
$field6=odbc_result($cur,6);
$field5=timetoint($field5);//这里是对sqlserver中的datetime范例的字段举行响应转换处置,转换成我所必要的int型
$querystring="insertintouser
(id,name,username,passWord,recdate)
values($field1,$field2,$field3,$field4,$field5)";

mysql_query($querystring,$conn);
}

functiontimetoint($str){
$arr1=split("",$str);
$datestr=$arr1;
$timestr=$arr1;
$arr_date=split("-",$datestr);
$arr_time=split(":",$timestr);
$year=$arr_date;
$month=$arr_date;
$day=$arr_date;
$hour=$arr_time;
$minute=$arr_time;
$second=$arr_time;
$time_int=mktime($hour,$minute,$second,$month,$day,$year);
return$time_int;
}
?>

将该段剧本存成sql.php,在服务器上实行,就能够将服务器上sqlserver中mydb数据库的user表中的数据导进到mysql中mydb数据库的user表中往。其他表的操纵与此相同,就不赘述了。

上面再先容一下asp剧本完成sqlserver中mydb数据库的数据向mysql中mydb数据库导进
<%
setconn=server.createobject("adodb.connection")
conn.openweb,admin,123456//web是sqlserver中mydb的数据源名,admin是会见mydb的用户名,123456是会见mydb的暗码
setrs=server.createobject("adodb.recordset")
sql="selectID,name,username,password,datediff(s,1970-01-0100:00:00,recdate)-8*3600,reid,filename,fileContentType,filevaluefromsenddate"//这条sql语句完成了将datetime范例的recdate字段转化成unix工夫戳的int型

rs.opensql,conn,1,3
setconn1=server.createobject("adodb.connection")
conn1.open"myoa","root","q1-d6=7?"
i=1
dowhilenotrs.eof
field1=rs(0)
field2=rs(1)
field3=rs(2)
field4=rs(3)
field5=rs(4)
sql1="insertintouser(ID,name,username,password,recdate)

values("&field1&","&field2&","&field3&","&field4&","&field5&")"

conn1.executesql1
rs.movenext
i=i+1
loop
rs.close
setrs=nothing
conn.close
setconn=nothing
conn1.close
setconn1=nothing

%>

以上两个是分离接纳php剧本和asp剧本对user表的数据举行由sqlserver到mysql的导进其间我接纳2种躲避的办法来制止ntext,image范例数据的传送,一种是将ntext字段改成nvarchar(4000),由于实践情形,原始数据中该字段的数据长度都未凌驾4000个字,以是并没有呈现数据截断,另外一个手腕是将image范例数据掏出来写到文件中,以文件情势保留,将文件路径存到数据库中,办法见下:

functionmakeattach(fileContentType,filevalue,i)
selectcasefileContentType
case"application/msword"
ext="doc"

case"application/vnd.ms-Excel"
ext="exl"

case"application/vnd.ms-Powerpoint"
ext="pps"

case"application/x-rar-comPRessed"
ext="rar"

case"application/x-zip-compressed"
ext="zip"

case"image/gif"
ext="gif"

case"image/pjpeg"
ext="jpg"

case"text/plain"
ext="txt"

caseelse
ext="x"

endselect
ifext"x"then
setfso=server.createobject("FileSystemObject")
fName="attech"&i&"."&ext
Dir="d:attach"
Iffso.FileExists(Dir&fName)Thenfso.deletefileDir&fName
IffName""ANDNOTfso.FileExists(Dir&fName)Then
Setstrm1=Server.CreateObject("ADODB.Stream")
strm1.Open
strm1.Type=1Binary
strm1.Writefilevalue
strm1.SaveToFileDir&fName,2
Setstrm1=Nothing
endif
makeattach=fName
endif
endfunction

这个函数有3个输出参数,第一个是文件的contentType,第二个是文件的二进制数值,第三个是个能够区分文件名的变量,先依据contentType断定所存文件的后缀名,然后就是将二进制数值保留成指定文件名的文件,并将文件名作为输入参数前往,将前往的参数作为数据写到mysql的数据库中保留。
工夫匆仓促,先总结到这里,但愿这些笔墨能对有必要的人有些匡助,少走些弯路,感激您的浏览。:)
MySQL已经为支持所有最流行的Web2.0语言做好了准备,诸如Ruby、Ajax等,当然还有PHP。有的业界分析师说过,“每一个Web2.0公司实质上就是一个数据库公司。

小魔女 发表于 2015-1-18 05:42:53

其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!

灵魂腐蚀 发表于 2015-1-21 12:27:52

外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。

金色的骷髅 发表于 2015-1-30 18:17:09

从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。

海妖 发表于 2015-2-6 14:51:39

所以你总能得到相应的升级版本,来满足你的需求。

莫相离 发表于 2015-2-16 18:12:18

所以你总能得到相应的升级版本,来满足你的需求。

分手快乐 发表于 2015-3-5 07:59:43

我们学到了什么?思考问题的时候从表的角度来思考问

admin 发表于 2015-3-12 01:58:32

是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。

兰色精灵 发表于 2015-3-19 17:35:53

连做梦都在想页面结构是怎么样的,绝非虚言
页: [1]
查看完整版本: 绝无经由的谈谈数据从sql server数据库导进mysql数据库的体验