phpmyadmin 导出表格到CSV,繁体中文变成问号

Posted

技术标签:

【中文标题】phpmyadmin 导出表格到CSV,繁体中文变成问号【英文标题】:phpmyadmin Export table to CSV, Traditional Chinese characters turn into question marks 【发布时间】:2013-03-11 23:48:44 【问题描述】:

我正在开发一个双语(英文和繁体中文)网站,其内容存储在数据库中。我通常将表导出为 CSV 并批量输入数据,然后将其重新导入表中。中文字符显示在数据库和网站中。但是,每当我导出带有繁体中文字符的表格时,它们就会变成问号。

我尝试将整个表以及各个列的排序规则更改为各种设置(大、二进制、utf8 等),但似乎没有任何效果。我也尝试在导出界面中使用字符集,但它也不能解决问题。

这是 phpmyadmin 的问题还是有一些设置可以解决这个问题?非常感谢您的帮助。

【问题讨论】:

这里有同样的问题..仍未解决.. 【参考方案1】:

我有点解决了将表格导出为包含中文的 csv 的问题。但不是真的用phpmyadmin。你可以使用这个导出脚本来导出你想要的包含中文的表格,它会正常显示

<?php
/*
 * PHP code to export mysql data to CSV
 * http://salman-w.blogspot.com/2009/07/export-mysql-data-to-csv-using-php.html
 *
 * Sends the result of a MySQL query as a CSV file for download
 */
/*
 * establish database connection
 */
$conn = mysql_connect('MYSQL_HOST', 'MYSQL_USERNAME', 'MYSQL_PASSWORD') or die(mysql_error());
mysql_select_db('MYSQL_DATABASE', $conn) or die(mysql_error($conn));
mysql_query("SET character_set_results=utf8", $conn);
/*
 * execute sql query
 */
$query = sprintf('SELECT * FROM MYSQL_TABLE');
$result = mysql_query($query, $conn) or die(mysql_error($conn));
/*
 * send response headers to the browser
 * following headers instruct the browser to treat the data as a csv file called export.csv
 */
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename=export.csv');
echo "\xEF\xBB\xBF";
/*
 * output header row (if atleast one row exists)
 */
$row = mysql_fetch_assoc($result);
if ($row) 
echocsv(array_keys($row));

/*
 * output data rows (if atleast one row exists)
 */
while ($row) 
echocsv($row);
$row = mysql_fetch_assoc($result);

/*
 * echo the input array as csv data maintaining consistency with most CSV implementations
 * - uses double-quotes as enclosure when necessary
 * - uses double double-quotes to escape double-quotes 
 * - uses CRLF as a line separator
 */
function echocsv($fields)

$separator = '';
foreach ($fields as $field) 
    if (preg_match('/\\r|\\n|,|"/', $field)) 
        $field = '"' . str_replace('"', '""', $field) . '"';
    
    echo $separator . $field;
    $separator = ',';

echo "\r\n";

?>

此代码是从以下来源复制和修改的:

    http://salman-w.blogspot.hk/2009/07/export-mysql-data-to-csv-using-php.html When exported to CSV russian characters won't display

原来问题不在于 csv 文件,而在于 excel。不管 csv 文件的编码是什么,excel 总是以 ASCII 格式打开,这就搞砸了中文。以上代码将

    将csv导出为UTF-8编码,这样mysql_query("SET character_set_results=utf8", $conn);就可以显示中文了 使用echo "\xEF\xBB\xBF"; 强制 excel 以 UTF-8 格式打开 csv

虽然这有点解决问题,但如果有人可以通过 phpmyadmin 弄清楚如何做到这一点,而不需要自定义导出脚本,那就太好了。

【讨论】:

以上是关于phpmyadmin 导出表格到CSV,繁体中文变成问号的主要内容,如果未能解决你的问题,请参考以下文章

phpmyadmin 导出 CSV 到 excel 删除数据

PHPmyadmin 3.4.9 导出到 CSV 的问题

为啥最新的 phpmyadmin 删除了 sql 作为导出格式?

使用 phpMyAdmin 从 mySQL 自动导出 CSV

phpMyAdmin:用 CSV 文件替换表格内容

Jquery将表格导出到csv隐藏表格单元格