Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. Я осваиваю MySQL.
При попытке загрузки данных через текстовый файл из приведённого в документации примера, возникакет ошибка:
mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;
ERROR 2 (HY000): File 'pet.txt' not found (Errcode: 2)
Я скопировал этот файл также в директории \data и \data\mysql, результат не изменился.
В какой директории должен находиться файл, из которого будет происходить заполнение таблицы?
Спасибо.
Неактивен
Возможно явно указать откуда загружать файл
LOAD DATA INFILE 'C:\mysql\pet.txt' INTO TABLE pet;
Неактивен
Задал точное расположение файла. Почему-то программа его всё равно ищет по какому-то своему пути:
mysql> LOAD DATA INFILE 'C:\Program Files\MySQL\MySQL Server 5.5\data\pet.txt' I
NTO TABLE pet;
ERROR 29 (HY000): File 'C:\Documents and Settings\All Users\Application Data\MyS
QL\MySQL Server 5.5\Data\Program FilesMySQLMySQL Server 5.5datapet.txt' not foun
d (Errcode: 2)
Как задать по умолчанию пути поиска файлов?
Неактивен
Нужно экранировать символ "\" в путях в windows.
Попробуйте
Отредактированно deadka (08.04.2011 16:21:34)
Неактивен
Спасибо, заработало.
Ещё небольшой вопрос: почему при загрузке из текстового файла нужно обязательно заполнять все строки и столбцы в этом файле?
При простановке на месте прочерка \N, \\N, NULL или просто пустого места, появляется ошибка:
' for column 'death' at row 1 date value: 'N ,
' for column 'death' at row 1 date value: '\N ,
' for column 'death' at row 1 date value: ',
или ' for column 'death' at row 1 date value: 'NULL.
соответственно. Как правильно задаётся прочерк в текстовом файле?
Неактивен
Что значит — прочерк в текстовом файле? Вы можете просто описать список столбцов,
которые есть в файле в скобках после LOAD DATA INFILE, остальные столбцы заполнят-
ся значениями по умолчанию (или NULL).
Неактивен
Если никто не против, на всякий случай приведу пример .
Допустим, у Вас есть таблица
Отредактированно deadka (08.04.2011 22:51:11)
Неактивен
paulus, а как сделать, чтобы не весь столбец заполнился NULL, а только некоторые его ячейки?
deadka спасибо, с разделением таблицы проблем не возникло. Но вот когда программа видит в файле пустое текстовое поле на месте какой-либо ячейки (в формате даты), то отказывается загружать весь текст файла.
Отредактированно Peroxide (11.04.2011 15:45:05)
Неактивен
Прочерк в текстовом файле - имеется в виду, такая комбинация символов, при которой в таблице в нужной ячейке (в формате даты) будет NULL.
Неактивен
Peroxide написал:
Но вот когда программа видит в файле пустое текстовое поле на месте какой-либо ячейки (в формате даты), то отказывается загружать весь текст файла.
А по какой причине отказывается? Приведите текст ошибки, а тажк приведите пожалуйста результат запроса
Неактивен
Текст запроса:
mysql> load data infile "C:\\pet.txt" into table pet fields terminated by ";";
' for column 'death' at row 1 date value: '/N
Вторая строчка - результат. Текст в базу не добавился.
результат запроса
show create table pet;
:
| Table | Create Table
|
+-------+---------------------------------------------------
------------------------------------------------------------
------------------------------------------------------------
--------------------------+
| pet | CREATE TABLE `pet` (
`name` varchar(20) DEFAULT NULL,
`owner` varchar(20) DEFAULT NULL,
`species` varchar(20) DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`birth` date DEFAULT NULL,
`death` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------
------------------------------------------------------------
------------------------------------------------------------
--------------------------+
Загружался обычный файл формата txt с текстом:
"Fluffy;Harold;cat;f;1993-02-04;/N
Claws ;Gwen;cat;m;1994-03-17;/N
Buffy;Harold;dog;f;1989-05-13;/N
Fang ;Benny;dog;m;1990-08-27;/N
Bowser;Diane;dog;m;1998-08-31;1995-07-29
Chirpy;Gwen;bird;f;1998-09-11;/N
Whistler;\N;Gwen;bird;1997-12-09;/N
Slim;Benny;snake;m;1996-04-29;/N"
Варианты с подстановкой вместо /N, //N и NULL приводили к аналогичным результатам.
Неактивен
Вы пробуете вставить вместо даты значение /N, вот он и ругается.
Отредактированная версия файла:
Fluffy;Harold;cat;f;1993-02-04;
Claws ;Gwen;cat;m;1994-03-17;
Buffy;Harold;dog;f;1989-05-13;
Fang ;Benny;dog;m;1990-08-27;
Bowser;Diane;dog;m;1998-08-31;1995-07-29
Chirpy;Gwen;bird;f;1998-09-11;
Whistler;\N;Gwen;bird;1997-12-09;
Slim;Benny;snake;m;1996-04-29;
mysql> CREATE TABLE `t_4087_pet` (
-> `name` varchar(20) DEFAULT NULL,
-> `owner` varchar(20) DEFAULT NULL,
-> `species` varchar(20) DEFAULT NULL,
-> `sex` char(1) DEFAULT NULL,
-> `birth` date DEFAULT NULL,
-> `death` date DEFAULT NULL
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.24 sec)
mysql> load data infile "/tmp/pet.txt" into table t_4087_pet fields terminated by ";";
Query OK, 8 rows affected, 8 warnings (0.00 sec)
Records: 8 Deleted: 0 Skipped: 0 Warnings: 8
mysql> select * from t_4087_pet;
+----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | 0000-00-00 |
| Claws | Gwen | cat | m | 1994-03-17 | 0000-00-00 |
| Buffy | Harold | dog | f | 1989-05-13 | 0000-00-00 |
| Fang | Benny | dog | m | 1990-08-27 | 0000-00-00 |
| Bowser | Diane | dog | m | 1998-08-31 | 1995-07-29 |
| Chirpy | Gwen | bird | f | 1998-09-11 | 0000-00-00 |
| Whistler | NULL | Gwen | b | 1997-12-09 | 0000-00-00 |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
+----------+--------+---------+------+------------+------------+
8 rows in set (0.00 sec)
Неактивен