这个数据转换是我自己写的,不需要下载任何其他的软件,只通过php文件实现access数据导入到mysql数据库,没有乱码问题。还是比较好用的,可以在这里下载,也可以做一下修改,可以改成直接写成.sql文件,因为时间的原因我就没有写,以后我写一个在线处理的方便大家使用。共同学习交流!
虽然是比较方便了,但是大家也不要认为照搬就可以了,首先还是要有几个准备工作要做,第一,对应access的表结构,要建好mysql的数据库和表,表的名字可以不同,但是字段名称必须一样。考虑到编码问题,我这里的实例是转换为utf-8的,如果和大家的不同,可以稍作修改。第二就是最好表先不要设置主键,这样导入的时候因为数据的关系可能出错,不过可以导入完之后再设置,不会影响数据的。很简单的。这里贴出我写的代码让大家看一下。欢迎指正。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
<?php /*** *用php将access数据导入mysql *前提是你要在自己的mysql数据库建好数据库 *对应的表结构要建好,但表的名子可以不同,但是字段名子必须相同 *至于字段的类型可以和原来相同,也可以不同,只要不冲突。 *$mdb 为你的access的.mdb数据文件 *这里设置的mysql数据编码为utf-8,请注意 */ /*access链接开始*/ error_reporting(E_ALL ^ E_NOTICE); //这几个参数需要配置 $mdb = ".mdb"; //access数据文件的相对路径,默认和本文件同级 $dbHost = 'localhost';//服务器 $dbUser = 'xxxx';//用户名 $dbPwd = 'xxx';//密码 $dbDate = 'xxx';//数据库名 $sub = $_POST['sub']; $table1 = $_POST['table1']; $table2 = $_POST['table2']; if(!empty($sub)&&!empty($table1)&&!empty($table2)){ set_time_limit(0); $connstr = "DRIVER=Microsoft Access Driver (*.mdb);DBQ=".realpath($mdb) ; $conn = odbc_connect($connstr,"","",SQL_CUR_USE_ODBC ); /*access链接结束*/ /*mysql链接开始*/ $con = mysql_connect($dbHost,$dbUser,$dbPwd); if(empty($con)){ echo '连接服务器失败'; } mysql_query("SET character_set_connection=utf8, character_set_results=utf8, character_set_client=binary",$con); $conni = mysql_select_db($dbDate,$con); if(empty($conni)){ echo '选择数据库失败'; } /*mysql 链接end*/ $rs = odbc_exec($conn,"select * from $table1"); $z =0; $c =0; $s =0; while($row = odbc_fetch_array($rs)){ //如何需要转化编码 foreach($row as $k=>$v){ $row[$k] = iconv("gb2312","UTF-8",$v); } $row = array_map('addslashes', $row);//过滤特殊字符 $jian = array_keys($row); $zhi = array_values($row); $jian = implode("`,`",$jian); $zhi = implode("','",$zhi); $sql = "INSERT INTO `$table2` (`$jian`) VALUES('$zhi')"; $query = @mysql_query($sql); if($query){ ++$c; }else{ ++$s; } ++$z; } echo '共执行'.$z.'条插入,成功'.$c.'条,失败'.$s.'条'; } ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <title> php将access数据导入mysql </title> <body> <?php if(empty($table1)||empty($table2)){ echo '请填写表名!'; } ?> <form action="" method="POST"> <div>请输入access中的需要导出的表名:<input type="text" name="table1" title="access表名" /></div> <div>请输入导入到mysql中的表名:<input type="text" name="table2" title="mysql表名" /></div> <div><input type="submit" name="sub" value="导入" /></div> </form> </body> <html> |
最近也是原来越多人在做数据和文件的处理,这些功能在本地装个环境操作就可以。很多时候我们都需要处理一些数据,所以做一个在线的数据处理也是很不错的,可以考虑。大家有需要的试一下吧
本文链接:http://www.521php.com/archives/510/
程序本天成,妙手偶得之!我们只是代码的搬运工!
转载请注明:http://www.521php.com/archives/510/
2013年10月09日 上午 2:58 村长 | 引用 | #1
博主你好,这个转换必须字段一样吗? 我mysql中字段太多,access中却只有三个字段,能不能指定? 另外问一下如何进行立案表导入,比如access中有id title url三个字段,我只想把title导入到mysql 表A,然后access中url字段导入到mysql 表B,同时把表A中的ID对应拷贝到表B