0

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

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

这是 phpmyadmin 的问题还是有一些设置可以解决这个问题?您的帮助将不胜感激。

4

1 回答 1

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. 导出为 CSV 时不会显示俄语字符

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

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

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

于 2013-04-27T10:07:10.657 回答