談談資料從sql server資料庫匯入mysql資料庫的體驗(轉)
談談資料從sql server資料庫匯入mysql資料庫的體驗(轉)[@more@]因工作需要,要將存放在sql server資料庫中的資料全部匯入到mysql資料庫中,在網上搜集相關資料,找到兩種方法,現在分別談談對他們的看法。第一種是安裝mysql ODBC,利用sql server的匯出功能,選擇mysql資料來源,進行資料的直接匯出,這種方法很簡便,但是針對實際應用有很多弊端,最主要體現就是資料型別問題,首先, sql server資料庫中的ntext,image等資料型別的資料無法直接寫入到mysql資料庫中,據說只要稍加改動就可以,可惜偶這隻菜鳥還沒想到如何改動,其次,因為偶在mysql中的資料庫設計中將時間都設成int型(儲存的是時間戳),所以在資料導過來後,就會出現衝突,再次,這種方法生成的mysql資料表的欄位型別都不很合適,所以此種方法我覺得不能提倡。第二種是利用php或asp指令碼來實現資料的匯入功能,這種方法需要編寫程式,但靈活性大,操作也不是那麼困難,一切都盡在你的掌握之中,現簡單介紹一下該方法前提條件是你的mysql環境已經搭建好了,先建好目標資料庫,再將所有的表結構用sql語句生成,現在萬事具備,只缺資料了。可以透過下面的php指令碼來實現sql server中mydb資料庫的user表中資料向mysql中mydb資料庫匯入$cnx = odbc_connect('web', 'admin', '123456');//'web'是sqlserver中mydb的資料來源名,'admin'是訪問mydb的使用者名稱,'123456'是訪問mydb的密碼$cur= odbc_exec( $cnx, 'select * from user' );//開啟sql server中mydb資料庫的user表$num_row=0;$conn=mysql_pconnect("localhost","root","123456");// 連線mysql@mysql_select_db('mydb',$conn) ordie("無法連線到資料庫,請與管理員聯絡!");//開啟mysql的mydb資料庫while( odbc_fetch_row( $cur )) //從sql server的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); //這裡是對sql server中的datetime型別的欄位進行相應轉換處理,轉換成我所需要的int型 $querystring = "insert into user(id,name,username,password,recdate)values('$field1','$field2','$field3','$field4','$field5')" ;mysql_query($querystring,$conn);}function timetoint($str){$arr1=split(" ",$str);$datestr=$arr1[0];$timestr=$arr1[1];$arr_date=split("-",$datestr);$arr_time=split(":",$timestr);$year=$arr_date[0];$month=$arr_date[1];$day=$arr_date[2];$hour=$arr_time[0];$minute=$arr_time[1];$second=$arr_time[2];$time_int=mktime($hour,$minute,$second,$month,$day,$year);return $time_int;}?>將該段指令碼存成sql.php,在伺服器上執行,就可以將伺服器上sql server中mydb資料庫的user表中的資料匯入到mysql中mydb資料庫的user表中去。其他表的操作與此雷同,就不贅述了。下面再介紹一下asp指令碼實現sql server中mydb資料庫的資料向mysql中mydb資料庫匯入set conn=server.createobject("adodb.connection")conn.open 'web', 'admin', '123456' // 'web'是sqlserver中mydb的資料來源名,'admin'是訪問mydb的使用者名稱,'123456'是訪問mydb的密碼set rs=server.createobject("adodb.recordset")sql="select ID,name,username,password,datediff(s,'1970-01-01 00:00:00',recdate)-8*3600,reid,filename,fileContentType,filevalue from senddate" //這條sql語句實現了將datetime型別的recdate欄位轉化成unix時間戳的int型rs.open sql,conn,1,3set conn1=server.createobject("adodb.connection")conn1.open "myoa","root","q1-d6=7?"i=1do while not rs.eoffield1 = rs(0) field2 = rs(1) field3 = rs(2) field4 = rs(3) field5 = rs(4) sql1 = "insert into user(ID,name,username,password,recdate) values("&field1&",'"&field2&"','"&field3&"','"&field4&"',"&field5&")"conn1.execute sql1rs.movenexti=i+1looprs.closeset rs=nothingconn.closeset conn=nothingconn1.closeset conn1=nothing%>以上兩個是分別採用php指令碼和asp指令碼對user表的資料進行由sql server到mysql的匯入其間我採用2種迴避的方法來避免ntext,image型別資料的傳遞,一種是將ntext欄位改為nvarchar (4000),因為實際情況,原始資料中該欄位的資料長度都未超過4000個字,所以並沒有出現資料截斷,另一個手段是將image型別資料取出來寫到檔案中,以檔案形式儲存,將檔案路徑存到資料庫中,方法見下:function makeattach(fileContentType,filevalue,i)select case fileContentTypecase "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"case elseext="x"end selectif ext<>"x" thenset fso=server.createobject("FileSystemObject")fName="attech"&i&"."&extDir="d:attach"If fso.FileExists(Dir & fName) Then fso.deletefile Dir & fNameIf fName<>"" AND NOT fso.FileExists(Dir & fName) ThenSet strm1=Server.CreateObject("ADODB.Stream")strm1.Openstrm1.Type=1 'Binarystrm1.Write filevaluestrm1.SaveToFile Dir & fName,2Set strm1=Nothingend ifmakeattach=fNameend ifend function這個函式有3個輸入引數,第一個是檔案的contentType,第二個是檔案的二進位制數值,第三個是個可以區別檔名的變數,先根據 contentType確定所存檔案的字尾名,然後就是將二進位制數值儲存成指定檔名的檔案,並將檔名作為輸出引數返回,將返回的引數作為資料寫到 mysql的資料庫中儲存。時間匆忙,先總結到這裡,希望這些文字能對有需要的人有些幫助,少走些彎路,感謝您的閱讀。:)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-940122/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在SQL Server資料庫中匯入MySQL資料庫Server資料庫MySql
- SQL Server資料庫安全管理經驗談SQLServer資料庫
- Sql Server資料庫資料匯入到SQLite資料庫中Server資料庫SQLite
- ORACLE資料庫裡表匯入SQL Server資料庫Oracle資料庫SQLServer
- 在SQL Server資料庫中匯入匯出資料SQLServer資料庫
- SQL Server資料庫匯入匯出資料方式比較SQLServer資料庫
- 資料庫 MySQL 資料匯入匯出資料庫MySql
- Sql Server 匯入另一個資料庫中的表資料SQLServer資料庫
- 從Excel到匯入MYSQL資料庫ExcelMySql資料庫
- MySQL資料庫結構和資料的匯出和匯入 (轉)MySql資料庫
- 四種方法在SQL Server資料庫中成批匯入資料SQLServer資料庫
- 【資料庫學習】資料庫平臺:mysql,sql server資料庫MySqlServer
- 資料庫SQL Server DAC 匯入匯出資料到SQL Azure問題資料庫SQLServer
- 不用發愁 - 談MySQL資料庫的最大體積 (轉)MySql資料庫
- mysql 資料庫匯入匯出MySql資料庫
- MySQL資料庫匯入匯出MySql資料庫
- 資料庫設計經驗談資料庫
- asp.net 操作Excel表資料匯入到SQL Server資料庫ASP.NETExcelSQLServer資料庫
- 如何將資料匯入到 SQL Server Compact Edition 資料庫中SQLServer資料庫
- 跟你談談MySQL資料庫入門學習之安裝篇(轉)MySql資料庫
- SQL Server 2008匯入、匯出資料庫SQLServer資料庫
- SQL資料庫的匯入和匯出SQL資料庫
- 【mysql】資料庫匯出和匯入MySql資料庫
- mysqldump匯入匯出mysql資料庫MySql資料庫
- Mysql 資料庫匯入與匯出MySql資料庫
- 轉享:NoSQL資料庫筆談SQL資料庫
- 淺談資料庫的攻擊(轉)資料庫
- 【資料庫資料恢復】Sql Server資料庫資料恢復案例資料庫資料恢復SQLServer
- SQL server資料匯入OracleSQLServerOracle
- 資料庫的日常管理經驗淺談資料庫
- 從運維角度淺談 MySQL 資料庫優化運維MySql資料庫優化
- 談談VB的資料庫程式設計方式 (轉)資料庫程式設計
- 閃回資料庫之後匯入資料實驗資料庫
- 用EXP/IMP從高版本資料庫匯出至低版本資料庫匯入實驗資料庫
- 大文字資料,匯入匯出到資料庫資料庫
- Sql Server 資料庫學習-常用資料庫 物件SQLServer資料庫物件
- 淺談圖資料庫資料庫
- 資料庫雜談(3)資料庫