Использование LOAD DATA INFILE с арабскими данными - PullRequest
2 голосов
/ 26 января 2010

Я пытаюсь импортировать файл .csv в таблицу. Я выяснил, как вставить данные, используя следующий запрос:

LOAD DATA INFILE 'examplesofdata.csv' INTO TABLE coins FIELDS TERMINATED BY ',' 
ENCLOSED BY '' ESCAPED BY '\\'  IGNORE 1 LINES;

Однако для нескольких моих полей у меня есть арабский контент, который вводится в виде серии? Я предполагаю, что это потому, что я не сопоставил базу данных правильно, или я не полностью понимаю запрос LOAD DATA INFILE. Любой совет будет принята с благодарностью.

ПОКАЗАТЬ СОЗДАТЬ СТОЛ монеты; вывод:

CREATE TABLE `coins` (
  `cat_num` int(11) NOT NULL,
  `reg_num` int(11) NOT NULL,
  `period` varchar(255) NOT NULL,
  `arb_period` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
  `ruler` varchar(255) NOT NULL,
  `arb_ruler` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
  `mint` varchar(255) NOT NULL,
  `arb_mint` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
  `date` varchar(255) NOT NULL,
  `weight` float NOT NULL,
  `diameter` float NOT NULL,
  `khedieval_num` varchar(255) NOT NULL,
  `ref` text NOT NULL,
 PRIMARY KEY  (`cat_num`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Ответы [ 7 ]

4 голосов
/ 23 июня 2013

ЗАГРУЗИТЬ ЛОКАЛЬНЫЙ ИНФИЛЬ ДАННЫХ 'filename' В TABLE tablename CHARACTER SET utf8 КОЛОННЫ, ПРЕКРАЩЕННЫЕ ЛИНИЯМИ '\ t', ПРЕКРАЩЕННЫЕ '\ n';

CHARACTER SET utf8 делает свое дело.

2 голосов
/ 15 января 2011

Это все еще ошибка в MySQL. Однако я обнаружил, что виновником является кодировка базы данных по умолчанию. Есть два возможных обходных пути:

  1. Если вы измените кодировку по умолчанию вашей базы данных на LATIN1, тогда она будет работать. Вы можете сохранить ваши таблицы / столбцы UTF-8.
  2. Странно, если вы используете "CHARACTER SET latin1", он будет работать как для таблиц / столбцов UTF-8, так и для Latin1. С помощью этого метода вы можете сохранить кодировку БД / таблицы / столбца в UTF-8.
1 голос
/ 18 февраля 2010

Итак, я получил ответ от старого инструктора для моего класса Базы данных. Он сказал мне, что эта проблема на самом деле является зарегистрированной ошибкой в ​​текущей версии MySQL и что единственное известное решение на тот момент - это ручной импорт данных через PHP или другой язык сценариев.

Ошибка для этой проблемы: http://bugs.mysql.com/bug.php?id=10195

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

0 голосов
/ 18 июня 2016

Добавление CHARACTER SET utf8 в оператор LOAD DATA является ближайшим ответом. Однако были затронуты еще два вопроса ...

При попытке использовать utf8 / utf8mb4, если вы видите Знаки вопроса (обычные, а не черные бриллианты),

  • Байты, подлежащие сохранению, не кодируются как utf8. Исправьте это.
  • Столбец в базе данных: CHARACTER SET utf8 (или utf8mb4). Исправьте это.
  • Также проверьте, что во время чтения установлено соединение utf8.

При попытке использовать utf8 / utf8mb4, если вы видите Усеченный текст,

  • Байты, подлежащие сохранению, не кодируются как utf8. Исправьте это.
  • Также проверьте, что во время чтения установлено соединение utf8.
0 голосов
/ 18 декабря 2013

У меня тоже была эта проблема, но вместо серии? Я получал усеченные данные.

Как будто «aeióu» усекается в «aei».

Проверьте решение, которое я придумал здесь , вам нужно сопоставить кодировку CSV с LOAD DATA INFILE.

Приветствия

0 голосов
/ 17 января 2011

Я также узнал, что ваш character_set_client должен быть также в формате UTF-8:

mysql> show session variables like 'char%';
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | latin1                        
...

Прочитать документы mysql о том, как изменить это для сервера who или только для сессии.

0 голосов
/ 26 января 2010

Как насчет настройки CHARACTER SET utf8_unicode или вашего региона?

...