日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 导入dbm文件_DBM数据导入到mysql数据库方法

發(fā)布時間:2023/11/30 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 导入dbm文件_DBM数据导入到mysql数据库方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文章分享一篇關于DBM數(shù)據(jù)導入到mysql數(shù)據(jù)庫方法,有需要的同學可以參考一下本實例。

首先說明一下,我以前使用PERL,保存文件 用DBM,有5萬多條記錄,每條記錄有15個字段。現(xiàn)在想用MYSQL,要吧記錄導過來。

第一步,將所有的DBM記錄導入到了一個文本文件,每個字段之間用TAB分開(就是"t"),每條記錄換行結束。

第二部,將數(shù)據(jù)讀入數(shù)組,并且打開數(shù)據(jù)庫和定義預處理如下:

代碼如下

復制代碼

$dbline=file("g:/allrecord.txt"); //將數(shù)據(jù)庫記錄讀入到數(shù)組

$collen=array(8,50,80,20,20,30,3,20,1,1,20,35,35,35,2); #表里面每個字段的長度數(shù)值

$db=new i('localhost','me','mypass','allrecdb');

if(mysqli_connect_errno()) {

echo "Can not connect db!";

exit;

}

$q->query("SET names 'gb2312'");

$q="INSERT INTO customers VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

$s=$db->prepare($q); #預定義插入記錄

//

數(shù)據(jù)庫有15個字段,為了方便導入,已經(jīng)設定全部類型為CHAR,長度從1到100不等,具體等同$collen的數(shù)值;

并且沒有任何字段設置UNIQUE或者PRIMARY KEY;

在命令行用INSERT命令插入記錄成功

//

代碼如下

復制代碼

foreach($dbline as $line) {

$rec=("t",trim($line));

//這里反復測試過,$rec數(shù)組有15個值,并且我都把它strval了

// for($j=0;$j

$rec[$j]=substr($rec[$j],0,$collen[$j]);

}

for($i=0;$i

$rec[$i]=strval($rec[$i]);

}

$s->bind_param("sssssssssssssss",$rec[0],$rec[1],$rec[2],$rec[3],$rec[4],$rec[5],$rec[6],$rec[7],$rec[8],$rec[9],$rec[10],$rec[11],$rec[12],$rec[13],$rec[14]);

$s->execute();

}

$s->close();

$db->close();

?>

經(jīng)過幾個小時的調(diào)試,發(fā)現(xiàn)任何字串超過字段長度就不能添加,所以做了如下處理。

1) 先把每個記錄的每個字段的長度進行了處理,代碼如下:

代碼如下

復制代碼

for($j=0;$j

$rec[$j]=substr($rec[$j],0,$collen[$j]);

}

2)再處理插入

代碼如下

復制代碼

$s->bind_param("sssssssssssssss",$rec[0],$rec[1],$rec[2],$rec[3],$rec[4],$rec[5],$rec[6],$rec[7],$rec[8],$rec[9],$rec[10],$rec[11],$rec[12],$rec[13],$rec[14]);

$s->execute();

這樣就可以插入記錄了。

目前剩下的問題是,任何帶有漢字的記錄,都不能插入(在命令行可以)。

查了資料,在命令行alter database crm character set 'gb2312',在腳本查詢前加入$db->query("SET names 'gb2312'")

都沒用。

也沒找到my.ini去改default-character-set=gb2312

難道php5.5暫時不支持中文?

MYSQL太多稀奇古怪的提示,解決不了問題,所有裝上了SQLITE,在命令行導入文本記錄,發(fā)現(xiàn)了問題:

1)某些字段中存在換行符,但是在任何文本編譯器中不換行或者不顯示。這樣會在導入的時候,1行變成2行,列參數(shù)自然不對了。

解決方案: 用str_replace($line,char(13));把每行內(nèi)的換行符替換掉,然后把所有記錄存入tmp.txt

2)再進行命令行的導入

代碼如下

復制代碼

sqlite3>.import tmp.txt customers

sqlite3> count(*) from cusomers;

57491

顯示導入成功。

可見,批量導入的時候,一定要處理好那些隱藏的特殊字符。

由于時間關系,沒有測試MYSQL的情況。晚上有空再確認一下同樣方案是否可行。

本文原創(chuàng)發(fā)布php中文網(wǎng),轉(zhuǎn)載請注明出處,感謝您的尊重!

總結

以上是生活随笔為你收集整理的mysql 导入dbm文件_DBM数据导入到mysql数据库方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。