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

首先说明一下,我以前使用PERL,保存文件 用DBM数据库,有5万多条记录,每条记录有15个字段。现在想用MYSQL,要吧记录导过来。
第一步,将所有的DBM记录导入到了一个文本文件,每个字段之间用TAB分开(就是"t"),每条记录换行结束。
第二部,将数据读入数组,并且打开数据库和定义预处理如下:

 代码如下 复制代码

<?php
$dbline=file("g:/allrecord.txt");  //将数据库记录读入到数组
$collen=array(8,50,80,20,20,30,3,20,1,1,20,35,35,35,2); #表里面每个字段的长度数值

$db=new mysqli('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); #预定义插入记录

//

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

 代码如下 复制代码
foreach($dbline as $line) {
    $rec=explode("t",trim($line));
    //这里反复测试过,$rec数组有15个值,并且我都把它strval了
    //    for($j=0;$j<count($rec);$j++) {
        $rec[$j]=substr($rec[$j],0,$collen[$j]);
    }
    for($i=0;$i<count($rec);$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();
?>

经过几个小时的调试,发现任何字串超过字段长度就不能添加,所以做了如下处理。
1) 先把每个记录的每个字段的长度进行了处理,代码如下:
 

 代码如下 复制代码
   for($j=0;$j<count($rec);$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,在命令行导入文本记录,发现了问题:

1)某些字段中存在换行符,但是在任何文本编译器中不换行或者不显示。这样会在导入的时候,1行变成2行,列参数自然不对了。
解决方案: 用str_replace($line,char(13));把每行内的换行符替换掉,然后把所有记录存入tmp.txt

2)再进行命令行的导入

 代码如下 复制代码
sqlite3>.import tmp.txt customers
sqlite3>select count(*) from cusomers;

57491

显示导入成功。

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

时间: 2024-08-29 11:30:52

DBM数据导入到mysql数据库方法的相关文章

jsp-java 中JSP 实现把excel表中数据导入到mysql数据库中的表中的具体实现方法

问题描述 java 中JSP 实现把excel表中数据导入到mysql数据库中的表中的具体实现方法 java 中JSP 实现把excel表中数据导入到mysql数据库中的表中的具体实现方法 解决方案 参考:http://blog.csdn.net/casilin/article/details/5750773 解决方案二: 楼主幸苦了!!谢谢分享!!! 解决方案三: jsp导excel到mysql数据库 http://wenku.it168.com/d_000468232.shtml

PHP把MSSQL数据导入到MYSQL的方法_php技巧

本文实例讲述了PHP把MSSQL数据导入到MYSQL的方法.分享给大家供大家参考.具体分析如下: 最近需要把一个以前的asp网站转换成php的,但php是与mysql而我的asp与mssql的,结果就需要把mssql数据导入到mysql数据库了,下面我自己写了一个实例还抄了一个实例都不错. 实例一,代码如下: 复制代码 代码如下: <?php  //国内的PNR码连接 $hostname="127.0.0.1"; //MSSQL服务器的IP地址 或 服务器的名字  $dbuser

php 把mssql数据导入转换mysql数据库

//mssql server与php连接  代码如下 复制代码 $mcn = mssql_connect('127.0.0.1','sa','1'); mssql_select_db('hb',$mcn); //mysql数据库连接  代码如下 复制代码 $conn = mysql_connect('localhost','root','a') or die('mysql server 连接失败'); mysql_select_db('sa',$conn);  代码如下 复制代码 $mssql

sqlserver数据导出到MYSQL数据库方法

利用官方工具操作 1.安装mysql数据库的ODBC驱动,mysql官网有下载http://dev.mysql.com/downloads/connector/odbc/  2.打开控制面板/管理工具/数据源ODBC,在用户DSN中添加一个MySQL ODBC 数据源. 3.接着在下面的窗体中输入数据源名称,如mysqlodbc:然后输入服务器Server地址(localhost或其他),用户User,密码Password,输入正确后选择要导入的数据库.在连接选项connect options中

3步搞定纯真IP数据导入到MySQL的方法详解_Mysql

前提: 你会用vi. 很明显,本文是在Linux下测试通过的.本文用的是MySQL命令行工具,如果你不会,用phpMyAdmin应该也可以. 第1步: 下载纯真IP数据,解压存成ip.txt. 详解:这一步不用详解了吧.如果你这一步都不会,下面就不用看了. 第2步: 用vi 编辑 ip.txt. # vi ip.txt 在vi界面下输入如下命令: :%s/\s\+/;/ 一共重复输入3次. 存盘退出: :wq 详解:ip.txt有4列.分别是起始ip,结束ip,地区,说明.列之间用不等数量的空格

SQL Server的数据导入MySQL数据库方法简介

[导读]本文介绍将存放在sql server数据库中的数据全部导入到mysql数据库中的两种方法. 第一种是安装mysql ODBC,利用sql server的导出功能,选择mysql数据源,进行数据的直接导出,这种方法很简便,但是针对实际应用有很多弊端,最主要体现就是数据类型问题,首先,sql server数据库中的ntext,image等数据类型的数据无法直接写入到mysql数据库中,据说只要稍加改动就可以,可惜偶这只菜鸟还没想到如何改动,其次,因为偶在mysql中的数据库设计中将时间都设成

php将csv文件导入到mysql数据库的方法_php技巧

本文实例讲述了php将csv文件导入到mysql数据库的方法.分享给大家供大家参考.具体分析如下: 本程序实现数据导入原理是先把csv文件上传到服务器,然后再通过php的fopen与fgetcsv文件把数据保存到数组,然后再用while把数据一条条插入到mysql数据库,代码如下: 复制代码 代码如下: <?php $fname = $_files['myfile']['name']; $do = copy($_files['myfile']['tmp_name'],$fname); if ($

将mysql数据库表中的部分数据导入到oracle数据库中

问题描述 将mysql数据库表中的部分数据导入到oracle数据库中 有一个问题:需要将Mysql数据库表中的某些数据导入oracle数据库的表中,需要通过传递文件来实现.比如将mysql数据生成.sql文件,然后执行该文件就可以写入到oracle数据库中.希望各位高手给个思路,谢谢 解决方案 可以用sql命令把数据导出到文件,e然后再把文件导入数据库 解决方案二: 你自己思路不是已经很清晰了吗? or你的意思是需要定时自动导入? 自动导入的话 估计需要借助写个程序实现了 解决方案三: 你自己思

急求将excel数据导入新建dBase数据库的快捷方法

问题描述 急求将excel数据导入新建dBase数据库的快捷方法.本人目前采用的方式是OleDb连接excel数据库,将数据导入DataSet,然后新建dBase数据库,将DataSet表内的数据逐行写于数据库,虽然可以实现,但是速度很慢,4000行记录要将近3min,有没有很快捷的方式或者块操作? 解决方案 解决方案二:用SQLBLUKCOPY函数,这个效率很高,是批量复制操作.publicstaticvoidImportDBFromExcelSource(DataTabledt,SqlCon