Home  >  Article  >  Backend Development  >  为什么导出来的数据中文都是乱码

为什么导出来的数据中文都是乱码

WBOY
WBOYOriginal
2016-06-23 13:44:242262browse

下面是备份数据库的代码,但是为什么导出来的数据中文都是乱码??
// 备份数据库
define('IN_FDYU', true);
require('includes/config.php');
// 这里的账号、密码、名称都是从页面传过来的
if (!mysql_connect($db_host, $db_user, $db_pass)) // 连接mysql数据库
{
    echo '数据库连接失败,请核对后再试';
    exit;

if (!mysql_select_db($db_name)) // 是否存在该数据库
{
    echo '不存在数据库:' . $db_name . ',请核对后再试';
    exit;

mysql_query("set names 'utf8'");
$mysql = "set charset utf8;\r\n";
$q1 = mysql_query("show tables");
while ($t = mysql_fetch_array($q1))
{
    $table = $t[0];
    $q2 = mysql_query("show create table `$table`");
    $sql = mysql_fetch_array($q2);
    $mysql .= $sql['Create Table'] . ";\r\n";
    $q3 = mysql_query("select * from `$table`");
    while ($data = mysql_fetch_assoc($q3))
    {
        $keys = array_keys($data);
        $keys = array_map('addslashes', $keys);
        $keys = join('`,`', $keys);
        $keys = "`" . $keys . "`";
        $vals = array_values($data);
        $vals = array_map('addslashes', $vals);
        $vals = join("','", $vals);
        $vals = "'" . $vals . "'";
        $mysql .= "insert into `$table`($keys) values($vals);\r\n";
    } 

 
$filename = $db_name . "_" . date('Y-m-d',time()) . ".sql"; //存放路径,默认存放到项目最外层
$fp = fopen($filename, 'w');
fputs($fp, $mysql);
fclose($fp);
header('location:index.php');
?>


回复讨论(解决方案)

$mysql .= "insert into `$table`($keys) values($vals); \r\n";
应该是在 windows 环境中了
当文本文件内容是 utf-8 编码的且没有 BOM 头,用编辑器打开是乱码,这是正常的

那该怎么弄?

搞错了,导出来是正常的,但是我再将导出来的文件导入到数据库时,数据里的中文都是乱码了

再导进去也要声明字符集呀

set names utf8

set names utf8



$mysql = "set charset utf8;\r\n";将这个改为$mysql = "set names utf8;\r\n";就可以了,谢谢!
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn