Для начала расскажу как вообще загружать в MySQL таблицу данные из CSV файла созданного в Excel.
Для загрузки данных из CSV используется команда LOAD DATA INFILE.
Пример использования:
Файл который мы будем загружать в Excel выглядит так:
Допустим у нас на диске D на локальном компьютере лежит файл rutext.csv созданный в Excel. Для загрузки данных из файла сначала создайте в MySQL таблицу которая будет содержать все поля которые присутствуют в нашем csv файле. Далее в MySQL пишем запрос:
LOAD DATA LOCAL INFILE 'D:/rutext.csv'
INTO TABLE `my_table'
FIELDS TERMINATED BY ';'
IGNORE 1 LINES
('date','text')
Разберём каждую строку отдельно:
1.LOAD DATA LOCAL INFILE 'D:/rutext.csv'
Команда загрузки данных из файла, оператор LOCAL нужен в случаях когда вы хотите загрузить данные на удалённый сервер, если MySQL сервер с базой в которую вы планируете загрузить данные установлен на вашем локальном компьютере то оператор LOCAL можно опустить. После оператора INFILE в одинарных кавычках необходимо прописать полный путь к файлу, папки и азделы разделяются через обратный слэш.
2.INTO TABLE `my_table'
Указываем таблицу в которую мы хотим загрузить данные, необходимо что бы в таблице присутствовали все поля которые есть в данных находящихся в csv файл.
3.FIELDS TERMINATED BY ';'
Данная строка указывает на символ который является разделителем в файле csv. В excel по умолчанию при сохранении файла в csv формате по умолчанию поля разделяются через точку с запятой, соответственно и нам надо указать точку с запятой в качестве разделителя. Для проверки как у вас делится файл откройте его в блокноте, (правый клик мыши на файле - открыть с помощью - блокнот)
Файл будет выглядеть следующим образом:
Как видно из скрина поля в нашем файле разделяются через точку с запятой.
4.IGNORE 1 LINES
Эта строка говорит пропустить 1ую строку csv файла, применяется в том случае если в csv файле первая строка является названием полей, если в csv у вас просто массив данных и в первой строке не прописаны названия полей эту строку писать не надо, т.к. в этом случае не будет загружена 1 строка файла. В нашем примере как вы видите из скрина выше название полей в файле присутсвуют , первая строка содержит названия "Дата" и "Комментарий".
5.('date','text')
Последняя строка указывает поля MySQL таблицы, её нужно писать в том случае если в MySQL таблице вы хотите загрузить данные не во все столбцы, например если в MySQL таблице у вас есть поле ID которое заполняется через AUTO_INCREMENT автоматически, то вам его загружать не надо. Порядок полей должен быть указан строго в том же порядке в котором расположены данные в файле csv.
По сути всё, таким образом вы без проблем загрузите данные из файла, проблема у вас возникнет если в вашем файле содержится русский текст.
Как корректно загрузить данные из csv файла созданного в Excel в котором содержится русский текст?
Сначала нам надо понять причину почему же русский текст у нас либо вообще не загружается, либо загружается в виде кракозябликов. Всё дело в том что по умолчанию csv файл созданный в Excel сохраняется в кодировке Windows 1251, а таблица в MySQL скорее всего у вас в кодировке UTF8, в связи с этим конфликтом кодировок у вас и возникает проблемма с загрузкой руского текста.
Наиболее простой способ перекодировать созданный ранее csv файл воспользоваться notepad++, бесплатную версию этой программы можно скачать тут.
Откройте свой csv файл в notepad++ , в меню "Кодировки" выберите пункт "Преобразовать в UTF8".
После перекодировки в нижнем углу вы увидите информацию о том что кодировка файла теперь UTF8.
Далее просто сохраните эти изменения и смело можете загружать файл с помощью написанного в начале статьи запроса:
LOAD DATA LOCAL INFILE 'D:/rutext.csv'
INTO TABLE `my_table'
FIELDS TERMINATED BY ';'
IGNORE 1 LINES
('date','text')
|