Как я могу импортировать китайские данные из Excel в MySQL? - PullRequest
2 голосов
/ 07 апреля 2011

Я файл Excel, в котором у меня есть китайский контент, и я хочу импортировать его в свои таблицы.

В моей таблице установлено сопоставление utf-8, а в таблице Excel есть три рабочих листа.

Когда я пытался преобразовать лист в файл csv и использовать их для импорта, но когда я открыл файл csv, в нем неправильно отображаются китайские символы ..

И я попытался преобразовать их в текстовый файлфайл, а затем импортировать, и, кажется, ничего не работает ..

Как я могу импортировать китайский контент в мою таблицу 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 ]

3 голосов
/ 27 апреля 2011

Попробуйте использовать 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

Например, я предполагаю, что ваш файл .csv, вероятно, был создан в китайской среде Windows, поэтому это может работать:

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

После этого вы сможете открыть [имя_файла] _utf8.csv в текстовом редакторе, удобном для UTF-8, и увидеть, как правильно отображается китайский.Именно этот файл [filename] _utf8.csv в кодировке UTF-8 вы будете использовать для загрузки данных в вашу базу данных.

0 голосов
/ 02 мая 2011

Если вы вставляете данные в базу данных, которая имеет кодировку UTF-8, вы должны быть уверены, что вставляете строку, закодированную в UTF-8. Как сказал buruzaemon, ваш CSV-файл, вероятно, закодирован в CP936, BIG-5 или GB18030.

Вы можете конвертировать из одной кодировки в другую в PHP с помощью mb_convert_encoding (str, to, [from]). Поскольку мы не уверены, в какой кодировке находится файл, мы можем попытаться автоматически определить его следующим образом:

<?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 здесь:

0 голосов
/ 07 апреля 2011

Кроме того, вы можете выполнить прямой импорт данных xls с помощью инструмента импорта данных в dbForge Studio for MySQL .Командная строка поддерживается.

0 голосов
/ 25 апреля 2011

Кроме предположения, что вы можете читать юникод, а не utf8, я не могу комментировать проблему с кодировкой. Однако может подойти альтернативный подход.

Я обнаружил, что PHPExcel полезен для работы непосредственно с файлами Excel.Большим плюсом является то, что это чистая реализация PHP, поэтому она будет работать на сервере * NIX или Mac так же хорошо, как на машине Windows с Excel.

0 голосов
/ 07 апреля 2011
  1. экспорт в CSV из Excel,
  2. используйте текстовый редактор, например, блокнот ++ для изменить кодировку на UTF-8 без DOM,
  3. импорт в дб через phpmyadmin
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...