国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

DBM數(shù)據(jù)導(dǎo)入到mysql數(shù)據(jù)庫(kù)方法

2024-07-24 12:39:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

首先說(shuō)明一下,我以前使用PERL,保存文件用DBM數(shù)據(jù)庫(kù),有5萬(wàn)多條記錄,每條記錄有15個(gè)字段,現(xiàn)在想用MYSQL,要把記錄導(dǎo)過(guò)來(lái).

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

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

  1. <?php 
  2. $dbline=file("g:/allrecord.txt");  //將數(shù)據(jù)庫(kù)記錄讀入到數(shù)組 
  3. $collen=array(8,50,80,20,20,30,3,20,1,1,20,35,35,35,2); #表里面每個(gè)字段的長(zhǎng)度數(shù)值 
  4.  
  5. $db=new mysqli('localhost','me','mypass','allrecdb'); 
  6. if(mysqli_connect_errno()) {  
  7.     echo "Can not connect db!"
  8.     exit
  9. $q->query("SET names 'gb2312'"); 
  10.  
  11. $q="INSERT INTO customers VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
  12.  
  13. $s=$db->prepare($q); #預(yù)定義插入記錄 
  14.  
  15. // 
  16. ?> 

數(shù)據(jù)庫(kù)有15個(gè)字段,為了方便導(dǎo)入,已經(jīng)設(shè)定全部類型為CHAR,長(zhǎng)度從1到100不等,具體等同$collen的數(shù)值;并且沒(méi)有任何字段設(shè)置UNIQUE或者PRIMARY KEY,在命令行用INSERT命令插入記錄成功,代碼如下:

  1. <?php 
  2. foreach($dbline as $line) { 
  3.     $rec=explode("t",trim($line)); 
  4.     //這里反復(fù)測(cè)試過(guò),$rec數(shù)組有15個(gè)值,并且我都把它strval了 
  5.     //    for($j=0;$j<count($rec);$j++) { 
  6.         $rec[$j]=substr($rec[$j],0,$collen[$j]); 
  7.     } 
  8.     for($i=0;$i<count($rec);$i++) { 
  9.         $rec[$i]=strval($rec[$i]); 
  10.     } 
  11.     $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]);  //Vevb.com 
  12.      $s->execute(); 
  13. $s->close(); 
  14. $db->close(); 
  15. ?> 

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

1) 先把每個(gè)記錄的每個(gè)字段的長(zhǎng)度進(jìn)行了處理,代碼如下:

  1. for($j=0;$j<count($rec);$j++) { 
  2.      $rec[$j]=substr($rec[$j],0,$collen[$j]); 
  3.  } 

2) 再處理插入,代碼如下:

  1. $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]); 
  2. $s->execute(); 

這樣就可以插入記錄了.

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

查了資料,在命令行alter  database crm character set 'gb2312',在腳本查詢前加入$db->query("SET names 'gb2312'")都沒(méi)用,也沒(méi)找到my.ini去改default-character-set=gb2312.

難道php5.5暫時(shí)不支持中文?

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

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

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

2)再進(jìn)行命令行的導(dǎo)入,代碼如下:

  1. sqlite3>.import tmp.txt customers 
  2. sqlite3>select count(*) from cusomers; 
  3. 57491 

顯示導(dǎo)入成功,可見,批量導(dǎo)入的時(shí)候,一定要處理好那些隱藏的特殊字符,由于時(shí)間關(guān)系,沒(méi)有測(cè)試MYSQL的情況,晚上有空再確認(rèn)一下同樣方案是否可行.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 四平市| 江孜县| 自治县| 靖州| 兴山县| 穆棱市| 湾仔区| 河间市| 宜昌市| 台湾省| 松溪县| 濉溪县| 安福县| 石棉县| 谢通门县| 兴城市| 繁昌县| 渝中区| 南康市| 延吉市| 务川| 中牟县| 娱乐| 唐河县| 泾阳县| 额尔古纳市| 囊谦县| 寿光市| 西华县| 石林| 连江县| 隆回县| 营山县| 巧家县| 吴堡县| 浙江省| 昌黎县| 新安县| 连云港市| 兖州市| 镇巴县|