之前帖子,由于不能回复了,因此开此贴,原帖地址
http://topic.csdn.net/u/20110425/14/20261335-1eb4-43e5-9314-2c1a3ee0f4f2.html
感谢各位兄弟们的帮助
我的系统是LINUX的系统,原来数据库版本5.1.49,
我按照falizixun2兄弟的这个代码已经成功导出数据库所有的表结构,但出现几个问题
<?php
//把这些代码保存为一个php文件
$database='mysql'; //选择要进行的备份的数据库名称,还有下面的mysql用户密码,其他不变就可以了。
mysql_connect('localhost','root','root');
mysql_select_db($database);
$sql1 = 'SHOW tables';
$result = mysql_query($sql1) or die ("sql语句$sql1执行错误");
$T=date("Y-m-d H:i:s");
$str="--PHP代码方式执行MYSQL数据库表结构备份  操作时间:$T\r\n\r\n";
while($row = mysql_fetch_array($result))
{
  $tablename=$row["Tables_in_$database"];
  $sql2="show create table $tablename";
  $result2 = mysql_query($sql2) or die ("sql语句$sql2执行错误".mysql_error());
  $row2 = mysql_fetch_array($result2);
  $str=$str.$row2['Create Table']."\r\n\r\n";
}
file_put_contents('wdf.sql',$str);
?>
问题1
导出的数据有很多问号
我数据库里有utf8格式的还有latin1格式的,是不是这个原因
下面是我截取的其中一段
CREATE TABLE `to_weituo` (
  `wid` int(11) unsigned NOT NULL auto_increment COMMENT '??????ID',
  `uid` int(11) NOT NULL default '0' COMMENT '?????ID',
  `zb_cgate` tinyint(2) NOT NULL default '0' COMMENT '1????2????',
  `zb_type` tinyint(2) NOT NULL default '0' COMMENT '????1????2????3????',
  `zb_stype1` tinyint(2) NOT NULL default '0' COMMENT '???????1??2??3??',
  `zb_stype2` tinyint(2) NOT NULL default '0' COMMENT '???????1?????2???????3????????4??????????5????6?????????',
  `zb_price1` tinyint(2) NOT NULL default '0' COMMENT '??????',
  `zb_price2` tinyint(2) NOT NULL default '0' COMMENT '??????',
  `zb_name` varchar(100) character set utf8 NOT NULL default '' COMMENT '????',
  `zb_area` int(8) NOT NULL default '0' COMMENT '????',
  `shen` varchar(32) character set utf8 NOT NULL default '' COMMENT '???',
  `city` varchar(32) character set utf8 NOT NULL default '' COMMENT '????',
  `zb_hometype` tinyint(3) NOT NULL default '0' COMMENT '????',
  `zb_zonetype` varchar(50) character set utf8 NOT NULL default '' COMMENT '????????(?????)',
  `zb_dangchi` tinyint(2) NOT NULL default '0' COMMENT '????1?2?3??',
  `zb_style` varchar(150) character set utf8 NOT NULL default '' COMMENT '???????????????1?2?3?4?',
  `ftime` int(10) NOT NULL default '0' COMMENT '??????',
  `zx_yaoqiu` text character set utf8 NOT NULL COMMENT '????',
  `sj_yaoqiu` text character set utf8 NOT NULL COMMENT '????',
  `email` varchar(120) character set utf8 NOT NULL default '' COMMENT 'Email',
  `phone` char(16) character set utf8 NOT NULL default '' COMMENT '??',
  `mobile` char(11) character set utf8 NOT NULL default '' COMMENT '??',
  `qq` char(20) character set utf8 NOT NULL default '' COMMENT 'Q Q',
  `ispass` tinyint(2) NOT NULL default '0' COMMENT '??????1?????0???',
  `tb_nums` mediumint(4) NOT NULL default '0' COMMENT '???',
  `usejidian` mediumint(7) NOT NULL default '0' COMMENT '????',
  `sourceid` mediumint(3) NOT NULL default '0' COMMENT '??????',
  `puttime` int(10) NOT NULL default '0' COMMENT '????',
  PRIMARY KEY (`wid`)
) ENGINE=MyISAM AUTO_INCREMENT=4373 DEFAULT CHARSET=latin12、无法导入到新的数据库提示错误,我新的数据已经升级到5.1.53
但导入还是和上面的一样错误,导入不进去,是什么原因啊,帮忙啊

解决方案 »

  1.   

    表结构中出现问号。。应该是编码没统一。。导出来之前改为utf8就可以了。
      

  2.   

    我数据库里有utf8格式的还有latin1格式的,是不是这个原因那些????是编码不一致导致的,你分析得没错,2个格式都有,最好尽早改成统一的格式,推荐都有UTF8格式,免去将来的麻烦!还好,你的那些??都是注释,不是核心部分,即使删除了也不影响表结构!
      

  3.   

    你需要在每条sql指令后面加入行结束符 “;”
      

  4.   

    不好意思,以前的代码只测试了导出,没有测试导入:现在更正一下:
      
      <?php
    //把这些代码保存为一个php文件
    $database='test'; //选择要进行的备份的数据库名称
    mysql_connect('localhost','root','wdf');
    mysql_select_db($database);
    $sql1 = 'SHOW tables';
    $result = mysql_query($sql1) or die ("sql语句$sql1执行错误");
    $T=date("Y-m-d H:i:s");
    $str="-- PHP代码方式执行MYSQL数据库表结构备份  操作时间:$T\r\n\r\n";//这里向后缩进了一个TAB
    while($row = mysql_fetch_array($result))
    {
      $tablename=$row["Tables_in_$database"];
      $sql2="show create table $tablename";
      $result2 = mysql_query($sql2) or die ("sql语句$sql2执行错误".mysql_error());
      $row2 = mysql_fetch_array($result2);
      $str=$str.$row2['Create Table'].";\r\n\r\n"; //注意这里更正了一个结尾的;没有分号会导致你图片里的mysql语法错误
    }
    file_put_contents('wdf.sql',$str);
    ?>
      
    还有导入的时候必须要把原来数据库内的所有表删除,否则会报表已经存在的错误!
      

  5.   

    兄弟能否把所有格式全部导成utf8格式的,
    我导成latin1,显示的都是问号
      

  6.   

     要修改也是没问题,很简单的,但是如果你以前的字符就是GBK的字符或本身就是在UTF8下输入的,那么就很容易乱套了,但是能保证你将来使用是统一的,如果一定要把所有表修改UTF8字符集,可以使用:
      
         
       <?php
    //把这些代码保存为一个php文件
    $database='wdf2'; //选择要进行的备份的数据库名称
    mysql_connect('localhost','root','wdf');
    mysql_select_db($database);
    $sql1 = 'SHOW tables';
    $result = mysql_query($sql1) or die ("sql1语句$sql1执行错误");
    $T=date("Y-m-d H:i:s");
    $str="-- PHP代码方式执行MYSQL数据库表结构备份  操作时间:{$T}\r\n\r\n";
    while($row = mysql_fetch_array($result))
    {
      $tablename=$row["Tables_in_{$database}"];
      $sql3="alter table $tablename default charset=utf8"; //增加部分
      mysql_query($sql3) or die ("sql3语句$sql2执行错误".mysql_error());//增加部分
      $sql2="show create table $tablename";
      $result2 = mysql_query($sql2) or die ("sql2语句$sql2执行错误".mysql_error());
      $row2 = mysql_fetch_array($result2);
      $str=$str.$row2['Create Table'].";\r\n\r\n";
    }
    file_put_contents('wdf.sql',$str);
    ?>
       
      

  7.   

    兄弟按这个方法不行啊 ,不能导出,提示sql3语句'to.to_dyqsrc' is not BASE TABLE
    是怎么回事啊
      

  8.   

    还有个问题,兄弟帮忙看看
    其他数据都导出正常,但有几个表导出整个表和数据能导出,但单独导出表结构倒不出,另外导入到新的数据库中总是提示错误下面的是我把整个表都导出,截取的前面代码,兄弟帮我看看是什么问题,是不是表在192.168.1.2这里不是同一个服务器,但如果这个表是连接的不同服务器,那应该也看不到才对啊,我实在是没办法了,大家帮忙,
    我如果是单独为他在新数据库里建立表结构,然后把后面的内容倒进去,这样行不行,会不会影响使用,还请大家帮忙
    对了,其他能正常导出的表,能看到是什么编码比如是utf,但这几个不能导出的表,看不到
    DROP TABLE IF EXISTS `to_zsgssrc`;
    CREATE ALGORITHM=UNDEFINED DEFINER=`tuo`@`192.168.1.2` SQL SECURITY DEFINER VIEW `to_zsgssrc` AS (select `to_fcom`.`id` AS `id`,`to_fcom`.`cname` AS `cname`,`to_fcom`.`goodlevel` AS `goodlevel`,`to_fcom`.`shen` AS `shen`,`to_fcom`.`city` AS `city`,concat(`to_fcom`.`town`,replace(replace(replace(`to_fcom`.`town`,_utf8'区',_utf8''),_utf8'县',_utf8''),_utf8'市',_utf8'')) AS `town`,`to_fcom`.`adds` AS `adds` from `to_fcom`);INSERT INTO `to_zsgssrc` VALUES ('270813', '成都鑫缘经典有限责任公司', '0', '四川', '成都', '成都市成都', '成都市营门口88号四威大厦B座三楼');
      

  9.   

    他原来数据库里是有这几个表的
    这个是视图吗,
    如果不把视图倒进来,会不会影响程序使用
    如何把视图导出和导入
    用PHP导
      

  10.   

    原来数据库中有两种编码utf8格式的还有latin1
    导出数据库中所有表的时候怎么区分啊