• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        談談數據從sql server數據庫導入mysql數據庫的體驗(原創)

        談談數據從sql server數據庫導入mysql數據庫的體驗(原創)

        更新時間:2022-05-13 文章作者:未知 信息來源:網絡 閱讀次數:

        因工作需要,要將存放在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) or

        die("無法連接到數據庫,請與管理員聯系!");//打開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,3
        set conn1=server.createobject("adodb.connection")
        conn1.open "myoa","root","q1-d6=7?"
        i=1
        do while not rs.eof
        field1 = 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 sql1
        rs.movenext
        i=i+1
        loop
        rs.close
        set rs=nothing
        conn.close
        set conn=nothing
        conn1.close
        set conn1=nothing

        %>

        以上兩個是分別采用php腳本和asp腳本對user表的數據進行由sql server到mysql的導入其間我采用2種回避的方法來避免ntext,image類型數據的傳遞,一種是將ntext字段改為nvarchar(4000),因為實際情況,原始數據中該字段的數據長度都未超過4000個字,所以并沒有出現數據截斷,另一個手段是將image類型數據取出來寫到文件中,以文件形式保存,將文件路徑存到數據庫中,方法見下:

        function makeattach(fileContentType,filevalue,i)
        select case fileContentType
        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"

        case else
        ext="x"

        end select
        if ext<>"x" then
        set fso=server.createobject("FileSystemObject")
        fName="attech"&i&"."&ext
        Dir="d:\attach\"
        If fso.FileExists(Dir & fName) Then fso.deletefile Dir & fName
        If fName<>"" AND NOT fso.FileExists(Dir & fName) Then
        Set strm1=Server.CreateObject("ADODB.Stream")
        strm1.Open
        strm1.Type=1 'Binary
        strm1.Write filevalue
        strm1.SaveToFile Dir & fName,2
        Set strm1=Nothing
        end if
        makeattach=fName
        end if
        end function

        這個函數有3個輸入參數,第一個是文件的contentType,第二個是文件的二進制數值,第三個是個可以區別文件名的變量,先根據contentType確定所存文件的后綴名,然后就是將二進制數值保存成指定文件名的文件,并將文件名作為輸出參數返回,將返回的參數作為數據寫到mysql的數據庫中保存。
        時間匆忙,先總結到這里,希望這些文字能對有需要的人有些幫助,少走些彎路,感謝您的閱讀。:)

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 亚洲中文字幕无码av在线| 1区1区3区4区产品亚洲| 国产成人精品日本亚洲语音 | 国产精品久久久久久久久久免费 | 毛片a级毛片免费播放100| 亚洲人xxx日本人18| 无码一区二区三区免费视频 | 日本成年免费网站| 一区二区亚洲精品精华液| 日韩免费毛片视频| 免费无码国产V片在线观看| 超清首页国产亚洲丝袜| 国产精品免费无遮挡无码永久视频| 亚洲国产精品第一区二区| 57pao国产成永久免费视频| 亚洲一级高清在线中文字幕| 美女黄网站人色视频免费国产| 国产AV无码专区亚洲AV蜜芽| 亚洲日韩在线观看| 久久精品免费视频观看| 亚洲三级在线视频| 免费观看国产小粉嫩喷水| 丝袜足液精子免费视频| 亚洲精品日韩中文字幕久久久| 女人18毛片免费观看| 免费国产黄网站在线看| 亚洲欧洲第一a在线观看| 免费黄色毛片视频| 中国精品一级毛片免费播放| 亚洲午夜成激人情在线影院| 日韩免费高清视频| 免费的全黄一级录像带| 99999久久久久久亚洲| 精品国产人成亚洲区| av无码国产在线看免费网站| 小说区亚洲自拍另类| 久久夜色精品国产噜噜亚洲AV| 国产无遮挡又黄又爽免费视频 | 亚洲国产精品久久久久婷婷老年| 毛片网站免费在线观看| 你是我的城池营垒免费看 |