• <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的數據庫中保存。
        時間匆忙,先總結到這里,希望這些文字能對有需要的人有些幫助,少走些彎路,感謝您的閱讀。:)

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

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 在线观看国产区亚洲一区成人 | a级毛片免费观看在线| 有色视频在线观看免费高清在线直播| 72pao国产成视频永久免费| 又粗又硬免费毛片| 久久久久亚洲av无码专区导航| www亚洲精品久久久乳| 日本一卡精品视频免费| www国产亚洲精品久久久| 亚洲国产精品乱码在线观看97| 国产99久久久久久免费看| 亚洲精品国产电影| 亚洲精品第一综合99久久| 久久精品成人免费网站| 亚洲国产精品一区二区九九| 国产亚洲精品影视在线| 在线观看国产情趣免费视频| 亚洲国产精品久久网午夜| 一个人在线观看视频免费| 亚洲精品国产成人99久久| 男女一边摸一边做爽的免费视频| 日本免费中文字幕在线看| 亚州**色毛片免费观看| 久久精品7亚洲午夜a| 亚洲一区二区三区成人网站 | 午夜免费福利在线| 亚洲人成高清在线播放| 国产成人免费视频| 亚洲精品乱码久久久久久蜜桃不卡| 国产成人亚洲午夜电影| 午夜无遮挡羞羞漫画免费| 亚洲综合激情九月婷婷| 国产免费一区二区视频| 亚洲熟妇无码久久精品| 女人毛片a级大学毛片免费| h视频在线观看免费| 亚洲欧洲在线播放| 免费一级毛片免费播放| 午夜网站在线观看免费完整高清观看| 亚洲AV无一区二区三区久久| 国产美女在线精品免费观看|