Как из csv занести данные в mysql
Всем привет!
Сегодня я хочу рассказать как можно данные из CSV-файла загрузить в БД MySQL.
Для сего это нужно???? Да разные бывают ситуации, иногда клиенты из экселя дают нам данные и просят их занести в БД, а как это сделать???? Не будем же мы подключать массивные скрипт для обработки этого файла и потом еще наступим на грабли с кодировкой… Есть пути куда проще.
В предыдущей своей статье я рассказывал, как записать данные из БД в CSV-файл.
Имеется содержимое файла
"id";"login";"pass" "3";"superadmin";"da1c42eb9cec3336fa8e996832fcbc90" "4";"admin";"21232f297a57a5a743894a0e4a801fc3" "5";"Fabian_Admin";"60f8ffb1f0d1d30a3d4a5909452da58d"
Первое что делаем, убираем первую строку — аля название поля в БД. Именно тут эта строка не влияет ни на что.
Далее создаем таблицу в БД с соот полями:
CREATE TABLE `user` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `login` VARCHAR(200) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci', `pass` VARCHAR(200) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci', PRIMARY KEY (`id`) ) COLLATE='utf8_unicode_ci' ENGINE=MyISAM ROW_FORMAT=DEFAULT
Теперь просто используя запрос:
LOAD DATA INFILE 'd:\\user.csv' INTO TABLE `user` FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES STARTING BY '' TERMINATED BY '\r\n';
Конструкция LOAD DATA INFILE ‘d:\\user.csv’ говорит о том, помещен файл с данными по указанному пути, путь абсолютный.
Конструкция FIELDS TERMINATED BY ‘;’ ENCLOSED BY ‘»‘ ESCAPED BY ‘\r\n’ говорит о том, что каждое поля в файле будут разделены знаком ;, также что каждое поле будет обернуто в знак «, если внутри поле будет соот знак, то БД позаботится об экранирования (ESCAPED BY) таких знаков (правила построения CSV файлов).
Конструкция LINES STARTING BY » TERMINATED BY ‘\r\n’ говорит о том, что каждая строка начинается с указаного занчения в LINES STARTING BY, а заканчивается строка значением в TERMINATED BY, в данном примере, я ничего не присваиваю началу строки, просто написал чтобы был виден общий синтаксис. Т.к. я юзаю Windows, которому в качестве переноса строки необходимо указать \r\n, поэтому я это значение и поставил в TERMINATED BY, если Вы юзаете *nix подобные системы, то там значение конца строки \n
В итоге выполнения запроса в таблицы БД будет следующее:
mysql> select * from user; +----+--------------+----------------------------------+ | id | login | pass | +----+--------------+----------------------------------+ | 3 | superadmin | da1c42eb9cec3336fa8e996832fcbc90 | | 4 | admin | 21232f297a57a5a743894a0e4a801fc3 | | 5 | Fabian_Admin | 60f8ffb1f0d1d30a3d4a5909452da58d | +----+--------------+----------------------------------+ 3 rows in set (0.00 sec)
Пожалуйста пользуйтесь!!! Есть вопросы — через комментарии.
UPD:
Вчера я допустил неточность, сказав что из CSV файла необходимо вручную убрать первую строчку. Её можно убрать с помощью запроса. Строка IGNORE num LINES, гду num это кол-во строк которые надо пропустить.
Вот полный запрос:
LOAD DATA INFILE 'd:\\user.csv' INTO TABLE `user` FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES STARTING BY '' TERMINATED BY '\r\n' IGNORE 1 LINES;
Статья просмотренна 95587 раз, зашло посетителей 31420