北京SEO

DBM数据导入到mysql数据库方法

2019/10/10/17:33:07  阅读:1796  来源:谷歌SEO算法  标签: 谷歌CEO

首先说明一下,我以前使用PERL,保存文件用DBM数据库,有5万多条记录,每条记录有15个字段,现在想用MYSQL,要把记录导过来.

第一步,将所有的DBM记录导入到了一个文本文件,每个字段之间用TAB分开(就是"t"),每条记录换行结束.

第二步,将数据读入数组,并且打开数据库和定义预处理,代码如下:

  1. <?php
  2. $dbline=file("g:/allrecord.txt");//将数据库记录读入到数组
  3. $collen=array(8,50,80,20,20,30,3,20,1,1,20,35,35,35,2);#表里面每个字段的长度数值
  4. $db=newmysqli('localhost','me','mypass','allrecdb');
  5. if(mysqli_connect_errno()){
  6. echo"Cannotconnectdb!";
  7. exit;
  8. }
  9. $q->query("SETnames'gb2312'");
  10. $q="INSERTINTOcustomersVALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
  11. $s=$db->prepare($q);#预定义插入记录
  12. //
  13. ?>

数据库有15个字段,为了方便导入,已经设定全部类型为CHAR,长度从1到100不等,具体等同$collen的数值;并且没有任何字段设置UNIQUE或者PRIMARY KEY,在命令行用INSERT命令插入记录成功,代码如下:

  1. <?php
  2. foreach($dblineas$line){
  3. $rec=explode("t",trim($line));
  4. //这里反复测试过,$rec数组有15个值,并且我都把它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]);//phpfensi.com
  12. $s->execute();
  13. }
  14. $s->close();
  15. $db->close();
  16. ?>

经过几个小时的调试,发现任何字串超过字段长度就不能添加,所以做了如下处理.

1) 先把每个记录的每个字段的长度进行了处理,代码如下:

  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();

这样就可以插入记录了.

目前剩下的问题是,任何带有汉字的记录,都不能插入(在命令行可以).

查了资料,在命令行alter database crm character set 'gb2312',在脚本查询前加入$db->query("SET names 'gb2312'")都没用,也没找到my.ini去改default-character-set=gb2312.

难道php5.5暂时不支持中文?

MYSQL太多稀奇古怪的提示,解决不了问题,所有装上了SQLITE,在命令行导入文本记录,发现了问题.

1)某些字段中存在换行符,但是在任何文本编译器中不换行或者不显示。这样会在导入的时候,1行变成2行,列参数自然不对了。

解决方案:用str_replace($line,char(13));把每行内的换行符替换掉,然后把所有记录存入tmp.txt.

2)再进行命令行的导入,代码如下:

  1. sqlite3>.importtmp.txtcustomers
  2. sqlite3>selectcount(*)fromcusomers;
  3. 57491

显示导入成功,可见,批量导入的时候,一定要处理好那些隐藏的特殊字符,由于时间关系,没有测试MYSQL的情况,晚上有空再确认一下同样方案是否可行.

广告内容

DBM数据导入到mysql数据库方法 DBM数据导入到mysql数据库方法 DBM数据导入到mysql数据库方法

相关阅读

热门评论

爱互踩 爱互踩

爱互踩流量交换~

总篇数175

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法