如何将中文数据从excel导入mysql?

时间:2011-04-07 07:21:16

标签: mysql mysqlimport

我是一个excel文件,我有中文内容,我想将它们导入我的表格。

我的表格设置为utf-8校对,我的Excel工作表有三个工作表。

当我尝试将工作表转换为csv文件并将其用于导入时,但是当我打开csv文件时,它没有正确的中文字符..

我试图将它们转换为txt文件,然后导入,似乎没有任何工作..

如何将中文内容导入我的mysql表?

更新

我尝试了你的答案但是没有按照我的方式工作。所以我从他的本机操作系统中请求客户端的新文件。 我的客户端给我发送了包含中文数据的.csv文件,当我在excel中打开它时,它有一些奇怪的字符但是当我用Dreamweaver打开它时它显示了中文字符。

当我尝试使用load data导入数据时,它在数据库中有相同的奇怪字符。然后我将文件上传到服务器并尝试使用php脚本插入到数据库中,它也不起作用..

我使用的脚本

<?php
  header('Content-type: text/html; charset=utf-8');
  include("includes/config.php");
  db_connect();
  mysql_query("SET NAMES utf8");
  $file = fopen("../file.csv", "r");
  $i = 0;
  while (!feof($file)) {
      $arr = fgetcsv($file);
      $qry = "insert into tbl_wine_tasting_notes
    (`color` , `name` , `producer` , `vintage` , `size` , `country` , `region` ,
    `sub_region` , `comments` , `alcohol` , `points` , `varietals` ,
    `website`,`label`)
    values 
    ('" . implode("','", $arr) . "')";

      mysql_query("SET NAMES utf8");
      mysql_query($qry);
  }
  fclose($file);
?> 

当我回应时,qry语句是正确的,但它甚至没有插入一行..

这有什么问题?我需要他们上传它们..

5 个答案:

答案 0 :(得分:3)

尝试使用iconv转换.csv文件转换下面的主要中文编码,将转换为UTF-8 。来自编码的第一个'-f'不会导致错误,它将是.csv文件的正确编码。从具有iconv的系统上的命令行,尝试:

iconv -f [Chinese encoding] -t UTF-8 [filename].csv > [filename]_utf8.csv

对于-f标志值,请尝试:

  1. CP936
  2. GB18030
  3. BIG-5
  4. 例如,我猜你的.csv文件可能是在中文Windows环境下创建的,所以这可行:

    iconv -f CP936 -t UTF-8 [filename].csv > [filename]_utf8.csv
    

    然后,您可以在UTF-8友好文本编辑器中打开[filename] _utf8.csv并查看正确显示的中文。这是用于将数据加载到数据库中的UTF-8编码的[filename] _utf8.csv文件。

答案 1 :(得分:0)

  1. 从excel导出到csv,
  2. 使用像notepad ++这样的文本编辑器 无需将编码更改为UTF-8 DOM,
  3. 通过phpmyadmin导入到数据库

答案 2 :(得分:0)

此外,您可以使用dbForge Studio for MySQL中的数据导入工具直接执行xls数据导入。支持命令行。

答案 3 :(得分:0)

除了暗示您可能正在阅读unicode而不是utf8之外,我无法对charset问题发表评论。 然而替代方法可能有用。

我发现PHPExcel对于直接使用Excel文件非常有用。一个很大的优点是它是一个纯PHP实现,所以在* NIX或Mac服务器上作为带有Excel的Windows机器运行愉快。

答案 4 :(得分:0)

如果要将数据插入到具有UTF-8编码的数据库中,则需要确保插入以UTF-8编码的字符串。像buruzaemon所说,你的CSV文件可能用CP936,BIG-5或GB18030编码。

您可以使用mb_convert_encoding(str,to,[from])在PHP中从一种编码转换为另一种编码。由于我们不确定文件的编码方式,我们可以尝试以这种方式自动检测:

<?php
  header('Content-type: text/html; charset=utf-8');
  include("includes/config.php");
  db_connect();
  mysql_query("SET NAMES utf8");
  $file = fopen("../file.csv", "r");
  $i = 0;
  while (!feof($file)) {

    $arr = fgetcsv($file);
    foreach ($arr as $key => $item) { 
       $arr[$key] = mb_convert_encoding($item, 'UTF-8', 'CP936, GB18030, BIG-5');
    }

      $qry = "insert into tbl_wine_tasting_notes
      (`color` , `name` , `producer` , `vintage` , `size` , `country` , `region` ,
       `sub_region` , `comments` , `alcohol` , `points` , `varietals` ,
       `website`,`label`)
        values 
      ('" . implode("','", $arr) . "')";

    mysql_query("SET NAMES utf8");
    mysql_query($qry);
 }
 fclose($file);
?> 

您可以在此处查看mb_convert_encoding的文档: