phpmyadmin将表格导出为CSV,繁体中文字符变成问号

时间:2013-03-22 07:26:04

标签: mysql csv phpmyadmin export

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

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

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

1 个答案:

答案 0 :(得分:0)

我有点解决了将表导出为包含中文的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";
}
?>

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

  1. http://salman-w.blogspot.hk/2009/07/export-mysql-data-to-csv-using-php.html
  2. When exported to CSV russian characters won't display
  3. 原来问题不在csv文件中,而是使用excel。无论csv文件的编码是什么,excel总是将其打开为ASCII,这会搞砸中文。上面的代码将

    1. 将csv导出为UTF-8编码,以便可以使用此mysql_query("SET character_set_results=utf8", $conn);
    2. 显示中文
    3. 使用此echo "\xEF\xBB\xBF";
    4. 强制将csv打开为UTF-8

      虽然这种方法解决了这个问题,但是有人可以通过phpmyadmin找出如何做到这一点,而不需要自定义导出脚本。