2.61数据备份恢复出错!1208 GBK版本的后台备份无法恢复解决方法

2016-07-07 15:48 来源:www.chinab4c.com 作者:ecshop专家

2.61数据备份恢复出错!1208 GBK版本的后台备份无法恢复:
出错信息为:
MySQL server error report:Array ( [0] => Array ( [message] => MySQL Query Error ) [1] => Array ( [sql] => CREATE TABLE `ecs_account_log` ( `log_id` mediumint(8) unsigned NOT NULL auto_increment, `user_id` mediumint(8) unsigned NOT NULL, `user_money` decimal(10,2) NOT NULL, `frozen_money` decimal(10,2) NOT NULL, `rank_points` mediumint(9) NOT NULL, `pay_points` mediumint(9) NOT NULL, `change_time` int(10) unsigned NOT NULL, `change_desc` varchar(255) NOT NULL, `change_type` tinyint(3) unsigned NOT NULL, PRIMARY KEY (`log_id`), KEY `user_id` (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=gbk DEFAULT CHARSET=utf8 ) [2] => Array ( [error] => Conflicting declarations: 'CHARACTER SET gbk' and 'CHARACTER SET utf8' ) [3] => Array ( [errno] => 1302 ) )
查看了一下,最终找到原因:
在admin\database.php中的sql_import函数中,在判断建表时缺 DEFAULT CHARSET=gbk 时,判断条件及增加语句都是utf8,所以只要把
if ((strpos($ret[$i], 'CREATE TABLE') !== false) && (strpos($ret[$i], 'DEFAULT CHARSET=utf8')=== false))
{
/* 建表时缺 DEFAULT CHARSET=utf8 */
$ret[$i] = $ret[$i] . ' DEFAULT CHARSET=gbk';
}

if ((strpos($ret[$i], 'CREATE TABLE') !== false) && (strpos($ret[$i], 'DEFAULT CHARSET=utf8')!== false))
{
$ret[$i] = str_replace('DEFAULT CHARSET=utf8', '', $ret[$i]);
}
改为:
if ((strpos($ret[$i], 'CREATE TABLE') !== false) && (strpos($ret[$i], 'DEFAULT CHARSET=gbk')=== false))
{
/* 建表时缺 DEFAULT CHARSET=gbk */
$ret[$i] = $ret[$i] . ' DEFAULT CHARSET=gbk';
}

if ((strpos($ret[$i], 'CREATE TABLE') !== false) && (strpos($ret[$i], 'DEFAULT CHARSET=gbk')!== false))
{
$ret[$i] = str_replace('DEFAULT CHARSET=gbk', '', $ret[$i]);
}

回答:
还是没有弄好啊 郁闷中

非常好!!

感谢 :)