最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

找到一種不錯的從SQLServer轉(zhuǎn)成Mysql數(shù)據(jù)庫的方法

 更新時間:2007年07月29日 17:59:35   作者:  
年初的時候一直在做一個網(wǎng)站MSSQL2000 -> MySQL5的遷移工作,因為采用了不同的程序系統(tǒng),所以主要問題在數(shù)據(jù)的遷移。由于2個系統(tǒng)數(shù)據(jù)庫結(jié)構(gòu)差異非常大,不方便采取SQL SERVER里導(dǎo)入MYSQL的ODBC數(shù)據(jù)源的功能(也不推薦這么做,字段類型等不同點會搞死人的~),因此就在WINDOWS下自己寫PHP腳本從SQLSERVER里讀數(shù)據(jù),然后按照新系統(tǒng)的需要處理之后插入MYSQL里面,靈活也比較方便。實際過程主要有下面幾個問題:

1、數(shù)據(jù)庫的連接,主要是連接SQL SERVER。主要有3種方法:
1.1 利用PHP中的mssql_系列函數(shù),這個與使用mysql_系列函數(shù)類似,不過要打開php.ini中相關(guān)擴展(extension=php_mssql.dll)。
1.2 利用ODBC連接,由于抽象了具體數(shù)據(jù)庫,所以沒有辦法利用數(shù)據(jù)表字段名=>數(shù)組鍵名的特性,在針對具體應(yīng)用時不是很方便,代碼形式:

$conn = odbc_connect("datasource","username","password");
$sql = "select * from news";
$cur= odbc_exec($conn, $sql);
while(odbc_fetch_row($cur)){
    $field1 = odbc_result($cur,1);
    $field2 = odbc_result($cur,2);
//do something
}
1.3 使用PDO - PHP5中加入數(shù)據(jù)對象抽象層,作為官方推出的數(shù)據(jù)訪問接口,優(yōu)點有很多,比如支持參數(shù)綁定以防止SQL注入;對于不同數(shù)據(jù)庫加載不同驅(qū)動即可,程序代碼是一致的,便于移植等等,相信應(yīng)該是大勢所趨。不過由于用了PHP5全新的面向?qū)ο筇匦?,需要PHP5的支持,5.1可以直接使用,5需要裝PECL,另外還要修改PHP.ini,增加:extension=php_pdo_mysql.dll和extension=php_pdo_mssql.dll,實際代碼如下:

try {
    $DBH=new PDO("mssql:dbname=XXX;host=localhost", 
"root", "password");//Connect to DB
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage();//Error Message
    die();
}
$stmt = $DBH->prepare("SELECT * FROM news");//Stmt Handle $stmt
if ($stmt->execute()) {
    while ($row = $stmt->fetch()) {
        //do something
    }
}
$stmt2 = $mssql->prepare("INSERT INTO news 
(title,author) VALUES (:title, :author)");
$stmt2->bindParam(':title', $title);
$stmt2->bindParam(':author', $author);
$stmt2->execute();
$DBH = null;// Close Connection這里要提醒下的是MSSQL里面是沒有MYSQL中LIMIT這個語法的。

2、TEXT字段被截斷的問題。
上面嘗試了3種連接數(shù)據(jù)庫方法,是因為當(dāng)初連上MSSQL后SELECT出來的數(shù)據(jù)總是只有4K長度,以為是連接方式限制導(dǎo)致的,所以換了幾種都是這樣,最后查了資料才知道,是php.ini里面這2句配置的問題:
; Valid range 0 - 2147483647. Default = 4096.
mssql.textlimit = 4096

; Valid range 0 - 2147483647. Default = 4096.
mssql.textsize = 4096
把4096改成-1(代表無限制)即可,也可以使用mssql_query("SET TEXTSIZE 65536");來實現(xiàn)。

3.兩種數(shù)據(jù)庫字段類型不同的問題有2個地方需要講一下,一個是字段支持最大長度要注意,以免插入數(shù)據(jù)庫時候被截斷,另外一個就是日期格式的問題了,我比較喜歡用UNIX時間戳。在連MSSQL時候可以用 "select unix_timestamp(created) from news" 來實現(xiàn)MSSQL里面DATETIME到MYSQL里時間戳的轉(zhuǎn)換。不過遷移時候一次要提取表中所有字段,像上面這種方法就沒有簡單的"select * from news"簡潔,需要羅列所有字段。實際可以直接SELECT出來,得到的是一個字符串,比如在MSSQL里面是2006-01-01 12:01,取出來的字符串是"2006 一月 01 12:01"(有些奇怪,不知道為什么會產(chǎn)生中文)。用下面這個函數(shù)可以轉(zhuǎn)換成時間戳:

function ConvertTime($timestring){
    if($timestring == null){
        return  0;
    }
    $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];
    }
    //return date("Y-m-d H:i:s",mktime($h,$i,$s,$month,$day,$year));
    return mktime($h,$i,$s,$month,$day,$year);
}最后轉(zhuǎn)換腳本寫完了可以在CMD窗口里面用php.exe abc.php來執(zhí)行,這種方式是沒有超時時間的,適合遷移大批量數(shù)據(jù)。
基本上就是這些內(nèi)容,希望對大家有幫助。 

Update(06/05/05):關(guān)于時間戳的轉(zhuǎn)換,在php.ini中加上
mssql.datetimeconvert = Off
后就能得到類似2006-01-01 12:01不帶有中文的格式了。

相關(guān)文章

  • MySQL事務(wù)實現(xiàn)可重復(fù)讀

    MySQL事務(wù)實現(xiàn)可重復(fù)讀

    MySQL數(shù)據(jù)庫的默認事務(wù)隔離級別是可重復(fù)讀,本文主要介紹了MySQL事務(wù)實現(xiàn)可重復(fù)讀,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • 一文帶你學(xué)會MySQL的select語句

    一文帶你學(xué)會MySQL的select語句

    在MySQL中可以使用SELECT語句來查詢數(shù)據(jù),查詢數(shù)據(jù)是指從數(shù)據(jù)庫中根據(jù)需求,使用不同的查詢方式來獲取不同的數(shù)據(jù),是使用頻率最高、最重要的操作,下面這篇文章主要給大家介紹了關(guān)于MySQL中select語句的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 淺談Mysql大數(shù)據(jù)分頁查詢解決方案

    淺談Mysql大數(shù)據(jù)分頁查詢解決方案

    本文主要介紹了淺談Mysql大數(shù)據(jù)分頁查詢解決方案,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • mysql 中文亂碼 解決方法集錦

    mysql 中文亂碼 解決方法集錦

    主要是針對 1.4x版本的一些亂碼問題,其實新版本中錯誤也差不多,大家注意下編碼問題。
    2009-06-06
  • MySQL提示The InnoDB feature is disabled需要開啟InnoDB的解決方法

    MySQL提示The InnoDB feature is disabled需要開啟InnoDB的解決方法

    這篇文章主要介紹了MySQL提示The InnoDB feature is disabled需要開啟InnoDB的解決方法,簡單分析了MySQL數(shù)據(jù)庫開啟InnoDB引擎的實現(xiàn)技巧,需要的朋友可以參考下
    2016-01-01
  • MySQL中的?DQL?聚合函數(shù)詳解

    MySQL中的?DQL?聚合函數(shù)詳解

    SQL聚合函數(shù)是一組函數(shù),用于計算并返回數(shù)據(jù)集的單個值,這些函數(shù)通常用于在SELECT語句中匯總數(shù)據(jù),本文給大家介紹MySQL中的DQL聚合函數(shù),感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • MySQL中的引號和反引號的區(qū)別與用法詳解

    MySQL中的引號和反引號的區(qū)別與用法詳解

    這個問題是我在學(xué)習(xí)數(shù)據(jù)庫的時候遇到的一個問題,我當(dāng)時并不能理解下圖中的一些情況,后來我也請教了一位大佬給我解答,最后在大佬和度娘的幫助下我大概理解了這個反引號的東西
    2021-10-10
  • 介紹一個針對C++程序的MySQL訪問庫soci

    介紹一個針對C++程序的MySQL訪問庫soci

    這篇文章主要介紹了介紹一個針對C++程序的MySQL訪問庫soci,文章中還講了其中的一些操作方法,需要的朋友可以參考下
    2015-05-05
  • MySQL8.0.20單機多實例部署步驟

    MySQL8.0.20單機多實例部署步驟

    本文主要介紹了MySQL8.0.20單機多實例部署步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • MySQL如何用分隔符分隔字符串

    MySQL如何用分隔符分隔字符串

    這篇文章主要介紹了MySQL如何用分隔符分隔字符串,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論

黎城县| 秦皇岛市| 永新县| 潞西市| 东乡县| 息烽县| 县级市| 嘉善县| 九龙城区| 图片| 钟祥市| 满洲里市| 灵武市| 金华市| 峨山| 金坛市| 沾益县| 福清市| 贺兰县| 大荔县| 蒙自县| 元江| 外汇| 密云县| 扎兰屯市| 临江市| 屏东县| 同仁县| 荔波县| 治多县| 萍乡市| 南雄市| 巨鹿县| 辽中县| 临漳县| 石台县| 织金县| 陆良县| 西城区| 兰坪| 河曲县|