SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 29.12.2010 22:13:24

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Работа из .bat файла

Уважаемые коллеги, для удобства администрирования БД ( так как не все пользователи БД владеют навыками работы с MySQL ) , переписал ряд рутинных моментов, выполняемых ежедневно в .bat файл. Но возникли некоторые трудности с реализацией запроса .

mysql -u root -p*******  -e "use `quality`;insert into temp_214  VALUES(null, curdate(), 1, 751, '4T6','5', '12');select*from `temp_214`;truncate`temp_214`";

Данный запрос отрабатывается на ура.
Но предполагается пакетная загрузка данных из текстового файла посредством следующей команды
LOAD DATA LOCAL INFILE "C:\\214.txt"

    INTO TABLE `quality`.`temp_214`
    CHARACTER SET cp1251
    FIELDS
      TERMINATED BY ';'
      ENCLOSED BY '"'

    LINES
      TERMINATED BY '\r\n'

     ( `Кокиль`, `Дефект`,`Локация` , `Автор`, `Стержень`)
     set `id`= null;
 

Сложность в том что, при вставке данной команды в строку mysql -u root -p*******  -e "use `quality`;..... появляется сообщение на ошибки, типа ... не является командой. (Приложить скрин не предстовляется возможным, так как обработка файла происходит мгновенно и окно закрывается.)
Предполагаю что при обработке mysql -u root -p*******  -e   ... доходя до части с LOAD DATA LOCAL INFILE  возникают сложности с разделителями или ковычками.
???   sad

Неактивен

 

#2 30.12.2010 02:43:41

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Работа из .bat файла

Насколько я помню виндоус, там можно к батнику сделать lnk, в котором можно
поставить галочку «не закрывать окно». Ну или не изобретать сложных путей,
а запустить батник из уже открытого окна (и оно тогда не закроется).

Что касается ошибки глобально — всегда можно сделать mysql < load_file.sql,
а в файле уже написать команды. Там уже никакой экранировки делать не нужно smile

Неактивен

 

#3 01.01.2011 23:48:48

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Работа из .bat файла

Уважаемые коллеги, поздравляю ВАС с наступившим НОВЫМ ГОДОМ !!!

Возникли некоторые вопросы и непонятки по работе .
Есть БД.

--
-- Create schema quality
--

CREATE DATABASE  quality DEFAULT CHARACTER SET cp1251;
USE quality;

--
-- Definition of table `tb_183`
--


CREATE TABLE `tb_183`(
`id` int(10) unsigned   auto_increment,
`Дата` date   ,
`Кокиль` tinyint(2) unsigned NOT NULL,
`Дефект` smallint(3) unsigned NOT NULL,
`Локация` varchar(4) NOT NULL,
`Автор` varchar(3)  default ' ',
`Стержень` varchar(3)   default ' ' ,
PRIMARY KEY(`id`,`Дата`,`Кокиль`,`Дефект`)

)ENGINE=InnoDB  AUTO_INCREMENT=1;


--
-- Definition of table `temp_214`
--

CREATE TABLE `temp_214`(
`id` int(10) unsigned   auto_increment,
`Дата` TIMESTAMP ,
`Кокиль` tinyint(2) unsigned NOT NULL,
`Дефект` smallint(3) unsigned NOT NULL,
`Локация` varchar(4) NOT NULL,
`Автор` varchar(3)  default ' ',
`Стержень` varchar(3)   default ' ' ,
PRIMARY KEY(`id`,`Дата`,`Кокиль`,`Дефект`)
)ENGINE=InnoDB  AUTO_INCREMENT=1;

--
-- Definition of table `tb_214`
--

CREATE TABLE `tb_214`(
`id` int(10) unsigned   auto_increment,
`Дата` date ,
`Кокиль` tinyint(2) unsigned NOT NULL,
`Дефект` smallint(3) unsigned NOT NULL,
`Локация` varchar(4) NOT NULL,
`Автор` varchar(3)  default ' ',
`Стержень` varchar(3)   default ' ' ,
PRIMARY KEY(`id`,`Дата`,`Кокиль`,`Дефект`)
)ENGINE=InnoDB  AUTO_INCREMENT=1;

--
-- Definition of table `tb_214_73`
--


CREATE TABLE `tb_214_73`(
`id` int(10) unsigned  auto_increment,
`Дата` date ,
`Кокиль` tinyint(2) unsigned NOT NULL,
`Дефект` smallint(3) unsigned NOT NULL,
`Локация` varchar(4) NOT NULL,
`Автор` varchar(3)  default ' ',
`Стержень` varchar(3)   default ' ' ,
PRIMARY KEY(`id`,`Дата`,`Кокиль`,`Дефект`)
)ENGINE=InnoDB  AUTO_INCREMENT=1;


--
-- Definition of table `tb_011`
--

CREATE TABLE `tb_011`(
`id` int(10) unsigned   auto_increment,
`Дата` date ,
`Кокиль` tinyint(2) unsigned NOT NULL,
`Дефект` smallint(3) unsigned NOT NULL,
`Локация` varchar(4) NOT NULL,
`Автор` varchar(3)  default ' ',
`Стержень` varchar(3)   default ' ' ,
PRIMARY KEY(`id`,`Дата`,`Кокиль`,`Дефект`)
)ENGINE=InnoDB  AUTO_INCREMENT=1;


--
-- Definition of trigger `modification_214`
--


DELIMITER $$

CREATE DEFINER = `root`@`localhost` TRIGGER `modification_214` BEFORE INSERT ON temp_214 FOR EACH ROW begin

    declare barid int default 0;
    declare ts date default curdate();
    declare _md2 int default 0;
    declare _md3 int default 0;
    declare _md9 int default 0;
    declare _md18 int default 0;
    declare _md20 int default 0;
    declare _md21 int default 0;
    declare _md22 int default 0;
    declare _md29 int default 0;
    declare _m69 int default 0;
    declare _m81 int default 0;
 
    Select curdate() into ts;

    set _md2 =2;
    set _md3 =3;
    set _md9 =9;
    set _md18 =18;
    set _md20 =20;
    set _md21 =21;
    set _md22 =22;
    set _md29 =29;
    set _m69 =69;
    set _m81 =81;

if (new.`Кокиль` = _md2 )||(new.`Кокиль` = _md3 )||(new.`Кокиль` = _md9 )||(new.`Кокиль` = _md18 )||(new.`Кокиль` = _md20 )||(new.`Кокиль` = _md21 )||(new.`Кокиль` = _md22 )||(new.`Кокиль` = _md29 ) then

     insert into tb_214_73(id,`Дата`, `Кокиль`, `Дефект`, `Локация`, `Автор`, `Стержень`)VALUES(null, curdate(), new.`Кокиль`, new.`Дефект`, new.`Локация`, new.`Автор`, new.`Стержень`);
   
   else

if (new.`Кокиль` = _m69 )||(new.`Кокиль` = _m81 ) then

     insert into tb_011(id,`Дата`, `Кокиль`, `Дефект`, `Локация`, `Автор`, `Стержень`)VALUES(null, curdate(), new.`Кокиль`, new.`Дефект`, new.`Локация`, new.`Автор`, new.`Стержень`);
     
   else

     insert into tb_214(id,`Дата`, `Кокиль`, `Дефект`, `Локация`, `Автор`, `Стержень`)VALUES(null, curdate(), new.`Кокиль`, new.`Дефект`, new.`Локация`, new.`Автор`, new.`Стержень`);
   
 end if;

 end if;


end $$

DELIMITER ;


--
-- Definition of table `temp_126`
--


CREATE TABLE `temp_126`(
`id` int(10) unsigned NOT NULL  auto_increment,
`Дата` TIMESTAMP ,
`Кокиль` tinyint(2) unsigned NOT NULL,
`Дефект` smallint(3) unsigned NOT NULL,
`Локация` varchar(4) NOT NULL,
`Автор` varchar(3)  default ' ',
`Стержень` varchar(3)   default ' ' ,
PRIMARY KEY(`id`,`Дата`,`Кокиль`,`Дефект`)
)ENGINE=InnoDB  AUTO_INCREMENT=1;


--
-- Definition of table `tb_126`
--


CREATE TABLE `tb_126`(
`id` int(10) unsigned NOT NULL  auto_increment,
`Дата` date ,
`Кокиль` tinyint(2) unsigned NOT NULL,
`Дефект` smallint(3) unsigned NOT NULL,
`Локация` varchar(4) NOT NULL,
`Автор` varchar(3)  default ' ',
`Стержень` varchar(3)   default ' ' ,
PRIMARY KEY(`id`,`Дата`,`Кокиль`,`Дефект`)
)ENGINE=InnoDB  AUTO_INCREMENT=1;


--
-- Definition of table `tb_194`
--


CREATE TABLE `tb_194`(
`id` int(10) unsigned NOT NULL  auto_increment,
`Дата` date ,
`Кокиль` tinyint(2) unsigned NOT NULL,
`Дефект` smallint(3) unsigned NOT NULL,
`Локация` varchar(4) NOT NULL,
`Автор` varchar(3)  default ' ',
`Стержень` varchar(3)   default ' ' ,
PRIMARY KEY(`id`,`Дата`,`Кокиль`,`Дефект`)
)ENGINE=InnoDB  AUTO_INCREMENT=1;






--
-- Definition of trigger `modification_126`
--



DELIMITER $$

CREATE DEFINER = `root`@`localhost` TRIGGER `modification_126` BEFORE INSERT ON temp_126 FOR EACH ROW begin

    declare barid int default 0;
    declare ts date default curdate();
    declare _md9 int default 0;
    declare _md15 int default 0;
    declare _md16 int default 0;
    declare _md17 int default 0;
   
 
    Select curdate() into ts;

    set _md9 =9;
    set _md15 =15;
    set _md16 =16;
    set _md17 =17;
   

if (new.`Кокиль` = _md9 )||(new.`Кокиль` = _md15 )||(new.`Кокиль` = _md16 )||(new.`Кокиль` = _md17 ) then

     insert into tb_194(id,`Дата`, `Кокиль`, `Дефект`, `Локация`, `Автор`, `Стержень`)VALUES(null, curdate(), new.`Кокиль`, new.`Дефект`, new.`Локация`, new.`Автор`, new.`Стержень`);
     
 else

insert into tb_126(id,`Дата`, `Кокиль`, `Дефект`, `Локация`, `Автор`, `Стержень`)VALUES(null, curdate(), new.`Кокиль`, new.`Дефект`, new.`Локация`, new.`Автор`, new.`Стержень`);
     
 

 end if;


end $$

DELIMITER ;


 





Работаю через консоль.
Ввожу запрос, который отрабатывается на ура +)).


mysql>
mysql> USE quality;
Database changed
mysql>
mysql> LOAD DATA LOCAL INFILE "C:\\214.txt"
    ->
    ->     INTO TABLE `quality`.`temp_214`
    ->     CHARACTER SET cp1251
    ->     FIELDS
    ->       TERMINATED BY ';'
    ->       ENCLOSED BY '"'
    ->
    ->     LINES
    ->       TERMINATED BY '\r\n'
    -> /*   IGNORE 1 LINES */
    ->      ( `Кокиль`, `Дефект`,`Локация` , `Автор`, `Стержень`)
    ->      set `id`= null;
Query OK, 8 rows affected (0.06 sec)
Records: 8  Deleted: 0  Skipped: 0  Warnings: 0

mysql>
mysql> LOAD DATA LOCAL INFILE "C:\\126.txt"
    ->
    ->     INTO TABLE `quality`.`temp_126`
    ->     CHARACTER SET cp1251
    ->     FIELDS
    ->       TERMINATED BY ';'
    ->       ENCLOSED BY '"'
    ->
    ->     LINES
    ->       TERMINATED BY '\r\n'
    -> /*   IGNORE 1 LINES */
    ->      ( `Кокиль`, `Дефект`,`Локация` , `Автор`, `Стержень`)
    ->      set `id`= null;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Deleted: 0  Skipped: 0  Warnings: 0

mysql>
mysql> LOAD DATA LOCAL INFILE "C:\\183.txt"
    ->
    ->     INTO TABLE `quality`.`tb_183`
    ->     CHARACTER SET cp1251
    ->     FIELDS
    ->       TERMINATED BY ';'
    ->       ENCLOSED BY '"'
    ->
    ->     LINES
    ->       TERMINATED BY '\r\n'
    -> /*   IGNORE 1 LINES */
    ->      ( `Кокиль`, `Дефект`,`Локация` , `Автор`, `Стержень`)
    ->      set `id`= null;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Deleted: 0  Skipped: 0  Warnings: 0
mysql> select*from `temp_214`;
+----+---------------------+--------+--------+---------+-------+----------+
| id | Дата                | Кокиль | Дефект | Локация | Автор | Стержень |
+----+---------------------+--------+--------+---------+-------+----------+
|  1 | 2011-01-01 23:28:57 |     27 |    751 | 4G6     | k     | 5        |
|  2 | 2011-01-01 23:28:57 |      2 |    751 | 4G6     | k     | 7        |
|  3 | 2011-01-01 23:28:57 |     69 |    751 | 4G6     | k     | 5        |
|  4 | 2011-01-01 23:28:57 |     23 |    751 | 4G6     | k     | 5        |
|  5 | 2011-01-01 23:28:57 |     81 |    751 | 4G6     | k     | 5        |
|  6 | 2011-01-01 23:28:57 |      4 |    751 | 4G6     | k     | 6        |
|  7 | 2011-01-01 23:28:57 |     29 |    751 | 4G6     | k     | 5        |
|  8 | 2011-01-01 23:28:57 |     18 |    751 | 4G6     | k     | 4        |
+----+---------------------+--------+--------+---------+-------+----------+
8 rows in set (0.00 sec)

mysql> select*from `tb_214`;
+----+------------+--------+--------+---------+-------+----------+
| id | Дата       | Кокиль | Дефект | Локация | Автор | Стержень |
+----+------------+--------+--------+---------+-------+----------+
|  1 | 2011-01-01 |     27 |    751 | 4G6     | k     | 5        |
|  2 | 2011-01-01 |     23 |    751 | 4G6     | k     | 5        |
|  3 | 2011-01-01 |      4 |    751 | 4G6     | k     | 6        |
+----+------------+--------+--------+---------+-------+----------+
3 rows in set (0.00 sec)

mysql> select*from `tb_214_73`;
+----+------------+--------+--------+---------+-------+----------+
| id | Дата       | Кокиль | Дефект | Локация | Автор | Стержень |
+----+------------+--------+--------+---------+-------+----------+
|  1 | 2011-01-01 |      2 |    751 | 4G6     | k     | 7        |
|  2 | 2011-01-01 |     29 |    751 | 4G6     | k     | 5        |
|  3 | 2011-01-01 |     18 |    751 | 4G6     | k     | 4        |
+----+------------+--------+--------+---------+-------+----------+
3 rows in set (0.00 sec)

mysql> select*from `tb_011`;
+----+------------+--------+--------+---------+-------+----------+
| id | Дата       | Кокиль | Дефект | Локация | Автор | Стержень |
+----+------------+--------+--------+---------+-------+----------+
|  1 | 2011-01-01 |     69 |    751 | 4G6     | k     | 5        |
|  2 | 2011-01-01 |     81 |    751 | 4G6     | k     | 5        |
+----+------------+--------+--------+---------+-------+----------+
2 rows in set (0.00 sec)

mysql>
mysql> /* select*from `tb_183`;*/
mysql>
mysql>
mysql>
mysql>
mysql>
mysql> TRUNCATE `temp_214`;
Query OK, 8 rows affected (0.03 sec)

mysql> TRUNCATE `temp_126`;
Query OK, 1 row affected (0.05 sec)




Ввожу запрос
mysql> source c:\load_data.sql;

Содержание файла load_data.sql

USE quality;


LOAD DATA LOCAL INFILE "C:\\214.txt"

    INTO TABLE `quality`.`temp_214`
/*    CHARACTER SET cp1251*/
    FIELDS
      TERMINATED BY ';'
      ENCLOSED BY '"'

    LINES
      TERMINATED BY '\r\n'
/*   IGNORE 1 LINES */
     ( `Кокиль`, `Дефект`,`Локация` , `Автор`, `Стержень`)
  set `id`= null;

LOAD DATA LOCAL INFILE "C:\\126.txt"

    INTO TABLE `quality`.`temp_126`
    CHARACTER SET cp1251
    FIELDS
      TERMINATED BY ';'
      ENCLOSED BY '"'

    LINES
      TERMINATED BY '\r\n'
/*   IGNORE 1 LINES */
     ( `Кокиль`, `Дефект`,`Локация` , `Автор`, `Стержень`)
     set `id`= null;

LOAD DATA LOCAL INFILE "C:\\183.txt"

    INTO TABLE `quality`.`tb_183`
    CHARACTER SET cp1251
    FIELDS
      TERMINATED BY ';'
      ENCLOSED BY '"'

    LINES
      TERMINATED BY '\r\n'
/*   IGNORE 1 LINES */
     ( `Кокиль`, `Дефект`,`Локация` , `Автор`, `Стержень`)
     set `id`= null;

/*    
select*from `temp_126`;
select*from `tb_126`;
select*from `tb_194`;  */


select*from `temp_214`;
select*from `tb_214`;
select*from `tb_214_73`;
select*from `tb_011`;

/*select*from `tb_183`;*/

TRUNCATE `temp_214`;
TRUNCATE `temp_126`;
 




И в результате обработки получаю три однотипных сообщения об ошибке и одна таблица  `temp_214`не выводится



mysql> source c:\load_data.sql;
ERROR:
Unknown command '\l'.
Database changed
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
` , `└тЄюЁ`, `╤ЄхЁцхэ№`)
  set `id`= null'
at line 10
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
` , `└тЄюЁ`, `╤ЄхЁцхэ№`)
     set `id`= null'
at line 10
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
` , `└тЄюЁ`, `╤ЄхЁцхэ№`)
     set `id`= null'
at line 10
Empty set (0.00 sec)

+----+------------+--------+--------+---------+-------+----------+
| id | Дата       | Кокиль | Дефект | Локация | Автор | Стержень |
+----+------------+--------+--------+---------+-------+----------+
|  1 | 2011-01-01 |     27 |    751 | 4G6     | k     | 5        |
|  2 | 2011-01-01 |     23 |    751 | 4G6     | k     | 5        |
|  3 | 2011-01-01 |      4 |    751 | 4G6     | k     | 6        |
|  4 | 2011-01-01 |     27 |    751 | 4G6     | k     | 5        |
|  5 | 2011-01-01 |     23 |    751 | 4G6     | k     | 5        |
|  6 | 2011-01-01 |      4 |    751 | 4G6     | k     | 6        |
+----+------------+--------+--------+---------+-------+----------+
6 rows in set (0.00 sec)

+----+------------+--------+--------+---------+-------+----------+
| id | Дата       | Кокиль | Дефект | Локация | Автор | Стержень |
+----+------------+--------+--------+---------+-------+----------+
|  1 | 2011-01-01 |      2 |    751 | 4G6     | k     | 7        |
|  2 | 2011-01-01 |     29 |    751 | 4G6     | k     | 5        |
|  3 | 2011-01-01 |     18 |    751 | 4G6     | k     | 4        |
|  4 | 2011-01-01 |      2 |    751 | 4G6     | k     | 7        |
|  5 | 2011-01-01 |     29 |    751 | 4G6     | k     | 5        |
|  6 | 2011-01-01 |     18 |    751 | 4G6     | k     | 4        |
+----+------------+--------+--------+---------+-------+----------+
6 rows in set (0.01 sec)

+----+------------+--------+--------+---------+-------+----------+
| id | Дата       | Кокиль | Дефект | Локация | Автор | Стержень |
+----+------------+--------+--------+---------+-------+----------+
|  1 | 2011-01-01 |     69 |    751 | 4G6     | k     | 5        |
|  2 | 2011-01-01 |     81 |    751 | 4G6     | k     | 5        |
|  3 | 2011-01-01 |     69 |    751 | 4G6     | k     | 5        |
|  4 | 2011-01-01 |     81 |    751 | 4G6     | k     | 5        |
+----+------------+--------+--------+---------+-------+----------+
4 rows in set (0.00 sec)

Query OK, 1 row affected (0.06 sec)

Query OK, 1 row affected (0.05 sec)

mysql>
 


Что за ошибки ??? один и тот же запрос , а отрабатывается по разному ???

Отредактированно Twix (01.01.2011 23:54:21)

Неактивен

 

#4 03.01.2011 17:19:35

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Работа из .bat файла

Попробуйте прописать SET NAMES в файле, который загружаете. Скорее всего,
кодировка, которая прописана в файле, не совпадает с кодировкой, которую
ожидает MySQL.

Неактивен

 

#5 04.01.2011 00:07:30

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Работа из .bat файла

Попробывал переписал запрос

LOAD DATA LOCAL INFILE "C:\\214.txt"

    INTO TABLE `quality`.`temp_214`
   CHARACTER SET cp1251
    FIELDS
      TERMINATED BY ';'
      ENCLOSED BY '"'

    LINES
      TERMINATED BY '\r\n'
/*   IGNORE 1 LINES */
     ( @var1, @var2,@var3 , @var4, @var5)

 set `id`= null
 set `Кокиль`= @var1
 set `Дефект`= @var2
 set `Локация`= @var3
 set `Автор`= @var4
 set `Стержень`= @var5;


При обработке получаю сообщение об ошибке
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that correspond
s to your MySQL server version for the right syntax to use near 'set `Кокиль`= @var1
 set `Дефект`= @var2
 set `Локация`= @var3
 set `Автор`= @va'
at line 12


???sad

Неактивен

 

#6 04.01.2011 13:09:42

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Работа из .bat файла

Кажется, тут Вы уже просто напутали в синтаксисе.
SET `id` = NULL, `Кокиль` = @var1, ...

Но только я бы вообще всё переписал — зачем присваивать переменным, если
можно сразу записывать в столбцы? Должно хватить простого
LOAD DATA INFILE ... (`Кокиль`, `Дефект`, ...);

Неактивен

 

#7 04.01.2011 15:29:02

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Работа из .bat файла

paulus написал:

Кажется, тут Вы уже просто напутали в синтаксисе.
SET `id` = NULL, `Кокиль` = @var1, ...

Да-да поправил код.

USE quality;


LOAD DATA LOCAL INFILE "C:\\214.txt"

    INTO TABLE `quality`.`temp_214`
  CHARACTER SET cp1251
    FIELDS
      TERMINATED BY ';'
      ENCLOSED BY '"'

    LINES
      TERMINATED BY '\r\n'
/*   IGNORE 1 LINES */
     ( @var1, @var2,@var3 , @var4, @var5)

 set `id`= null,`Кокиль`= @var1, `Дефект`= @var2,`Локация`= @var3,`Автор`= @var4,`Стержень`= @var5;
 


Водя этот запрос в консоль он отрабатывается на ура +)). А вот при загрузке из файла , командой
source c:\load_data.sql;


Получаю вновь сообщение об ошибке
[mysql> source c:\load_data.sql;
ERROR:
Unknown command '\l'.
Database changed
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that correspond
s to your MySQL server version for the right syntax to use near ' `= @var3,`└тЄюЁ`= @var4,
`╤ЄхЁцхэ№`= @var5'
at line 11/syntax]

???

Изначально содержание файла было таким [syntax=mysql]USE quality;

LOAD DATA LOCAL INFILE "C:\\214.txt"

    INTO TABLE `quality`.`temp_214`
    CHARACTER SET cp1251
    FIELDS
      TERMINATED BY ';'
      ENCLOSED BY '"'

    LINES
      TERMINATED BY '\r\n'
/*   IGNORE 1 LINES */
     ( `Кокиль`, `Дефект`,`Локация` , `Автор`, `Стержень`)
     set `id`= null;


Но при этом проблемы были те же ???

Неактивен

 

#8 04.01.2011 15:42:13

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Работа из .bat файла

Вот изначальное мне нравится куда больше. Проблемы не в этом, проблемы
в том, что в виндоус проблемы с путями smile

В частности, когда Вы пишете c:\load — \l интерпретируется как команда.
Аналогично с c:\214. Попробуйте использовать прямые слеши, иногда это
работает. Иначе — экспериментируйте с нужным количеством экранировок
слешей.

И SET NAMES в файл .sql таки допишите.

Неактивен

 

#9 04.01.2011 19:26:13

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Работа из .bat файла

К сожалению эксперименты со слешами не привели к желаемому результату ?!
Немного покапавшись, пришёл к пониманию вопроса - проблема не с путями в Винде, а всё же с кодировкой . ( мне так показалось , переместил файл на сервер ,изменил содержание команды на LOAD DATA  INFILE '214.txt'

    INTO TABLE `temp_214`
....  т.е. исключил влияние слэшей)
Изменил содержание файла , в котором прописан перечень команд к исполнению и он отрабатывается на ура +)), как из командной строки посредсвом  mysql -u root -p******* -t -vvv < C:\data.sql   , так и посредством source C:\data.sql

Может быть попробывать периписать названия столбцов в таблицах на англицкий лад ???
Или что то делать с кодировкой ???
Али что ещё ???
Теряюсь в догадках ... млять.

Отредактированно Twix (04.01.2011 22:32:59)


Прикрепленные файлы:
Attachment Icon data.sql, Размер: 165 байт, Скачано: 862

Неактивен

 

#10 06.01.2011 17:17:04

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Работа из .bat файла

В data.sql у Вас только запросы, в которых не хватает пробелов smile
Впрочем, LOAD DATA INFILE среди них нету, так что, видимо, это не тот файл.

Проблемы с кодировкой лечатся путем дописывания строки SET NAMES в файл,
в котором вызывается LOAD DATA INFILE.

Неактивен

 

#11 06.01.2011 21:57:42

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Работа из .bat файла

paulus написал:

В data.sql у Вас только запросы, в которых не хватает пробелов smile
Впрочем, LOAD DATA INFILE среди них нету, так что, видимо, это не тот файл.

Проблемы с кодировкой лечатся путем дописывания строки SET NAMES в файл,
в котором вызывается LOAD DATA INFILE.

В data.sql преднамеренно убрал LOAD DATA INFILE, для проверки mysql -u root -p******* -t -vvv < C:\data.sql  и  source C:\data.sql   ( чтобы исключить влияние слэшей и прочих проблем с путями в винде).

Отредактировал содержанрие файла с запросами ( см.приложение ). Вводя в консоль содержимое файла , все запросы отрабатываются на 5+, а вот посредством  mysql> source C:\load_data.sql;
опять получаю сообщения об ошибке ??? следующего содержания

ERROR:
Unknown command '\l'.
Database changed
Query OK, 0 rows affected (0.00 sec)

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 
` , `└тЄюЁ`, `╤ЄхЁцхэ№`)
set `id`= null' at line 10
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 
` , `└тЄюЁ`, `╤ЄхЁцхэ№`)
     set `id`= null' at line 10
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 
` , `└тЄюЁ`, `╤ЄхЁцхэ№`)
     set `id`= null' at line 10
Empty set (0.00 sec)

Empty set (0.00 sec)

Empty set (0.00 sec)

Empty set (0.00 sec)

Query OK, 1 row affected (0.05 sec)

Query OK, 1 row affected (0.05 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.06 sec)


???????

Отредактированно Twix (07.01.2011 00:41:14)


Прикрепленные файлы:
Attachment Icon load_data.sql, Размер: 1,345 байт, Скачано: 864

Неактивен

 

#12 07.01.2011 01:05:54

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Работа из .bat файла

Всё же не даёт покоя не решённый вопрос.
Поправил содержание файла с данными ( откуда происходит закачка данных в БД , первоначально там присутствовали англицкие символы !!!, а должны быть только русские)


27;751;4П6;Ы;5
2;751;4Д6;О;7
69;751;4В6;Э;5
23;751;4О6;7;5
81;751;4Ш6;8;5
4;751;4Ф6;Г;6
29;751;4Л6;2;5
18 ;751;4Д6;Ц;4


Ввёл в консоль запрос
USE quality;

SET NAMES cp1251;

LOAD DATA  INFILE '214.txt'

    INTO TABLE `temp_214`
    CHARACTER SET cp1251
    FIELDS
      TERMINATED BY ';'
      ENCLOSED BY '"'

   LINES
      TERMINATED BY '\r\n'
/*   IGNORE 1 LINES */
     ( `Кокиль`, `Дефект`,`Локация` , `Автор`, `Стержень`)

 set `id`= null;



LOAD DATA  INFILE '126.txt'

    INTO TABLE `quality`.`temp_126`
    CHARACTER SET cp1251
    FIELDS
      TERMINATED BY ';'
      ENCLOSED BY '"'

    LINES
      TERMINATED BY '\r\n'
/*   IGNORE 1 LINES */
     ( `Кокиль`, `Дефект`,`Локация` , `Автор`, `Стержень`)
     set `id`= null;



LOAD DATA  INFILE '183.txt'

    INTO TABLE `quality`.`tb_183`
    CHARACTER SET cp1251
    FIELDS
      TERMINATED BY ';'
      ENCLOSED BY '"'

    LINES
      TERMINATED BY '\r\n'
/*   IGNORE 1 LINES */
     ( `Кокиль`, `Дефект`,`Локация` , `Автор`, `Стержень`)
     set `id`= null;
 


И !!! на экране в таблицах получил кракозяблы вместо символов ( до этого когда в исходном файле были англицкие символы они отображались в таблице , после закачки , отлично . А  вот русские символы теперь в виде кракозяблов !!!).
mysql> select*from `temp_214`;
+----+---------------------+--------+--------+---------+-------+----------+
| id | Дата                | Кокиль | Дефект | Локация | Автор | Стержень |
+----+---------------------+--------+--------+---------+-------+----------+
|  1 | 2011-01-07 00:56:09 |     27 |    751 | 46     | █     | 5        |
|  2 | 2011-01-07 00:56:09 |      2 |    751 | 46     | ╬     | 7        |
|  3 | 2011-01-07 00:56:09 |     69 |    751 | 46     | ▌     | 5        |
|  4 | 2011-01-07 00:56:09 |     23 |    751 | 46     | 7     | 5        |
|  5 | 2011-01-07 00:56:09 |     81 |    751 | 46     | 8     | 5        |
|  6 | 2011-01-07 00:56:09 |      4 |    751 | 46     | ├     | 6        |
|  7 | 2011-01-07 00:56:09 |     29 |    751 | 46     | 2     | 5        |
|  8 | 2011-01-07 00:56:09 |     18 |    751 | 46     | ╓     | 4        |
+----+---------------------+--------+--------+---------+-------+----------+
8 rows in set (0.00 sec)
 

Запрос
mysql>  source C:/load_data.sql;
обрабатывается так же с сообщением об ошибке .

Неактивен

 

#13 07.01.2011 20:02:02

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Работа из .bat файла

Хм. Файлик, вроде, правильный. Единственное, что приходит в голову: SET NAMES
меняет не все переменные кодировок. Попробуйте тогда сменить все сопоставления.
Кажется, что это ошибка клиента, но лучше проверить окончательно.

SET character_set_filesystem = cp1251;
SET character_set_database = cp1251;
SET character_set_server = cp1251;

Если не поможет — хороший повод написать ошибку на bugs.mysql.com.

Неактивен

 

#14 07.01.2011 20:51:48

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Работа из .bat файла

Тут вот давеча сделал запрос


mysql> \s
--------------
C:\Program Files\MySQL\MySQL Server 5.0\bin\mysql.exe  Ver 14.12 Distrib 5.0.51a, for Win32 (ia32)

Connection id:          31
Current database:
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.0.51a-community-nt MySQL Community Edition (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    cp1251
Db     characterset:    cp1251
Client characterset:    cp1251
Conn.  characterset:    cp1251
TCP port:               3306
Uptime:                 1 day 10 hours 43 sec

Threads: 1  Questions: 2542  Slow queries: 0  Opens: 79  Flush tables: 1  Open tables: 0  Queries per second avg: 0.021
--------------


mysql>

Отредактированно Twix (07.01.2011 20:53:19)

Неактивен

 

#15 07.01.2011 21:04:02

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Работа из .bat файла

Поправил содержание файла load_data.sql вписал

USE quality;

SET NAMES cp1251;
SET character_set_filesystem = cp1251;
SET character_set_database = cp1251;
SET character_set_server = cp1251;

LOAD DATA  INFILE '214.txt'

    INTO TABLE `temp_214`
    CHARACTER SET cp1251
    FIELDS
      TERMINATED BY ';'
      ENCLOSED BY '"'

   LINES
      TERMINATED BY '\r\n'
/*   IGNORE 1 LINES */
     ( `Кокиль`, `Дефект`,`Локация` , `Автор`, `Стержень`)

 set `id`= null;
........
........
 




Ввёл в консоль запрос из файла , отработал на ура !!!! только в таблице кракозяблы (см. сообщение №12).

Запрос   
mysql>  source C:/load_data.sql;

обрабатывается так же с сообщением об ошибке .

Отредактированно Twix (07.01.2011 21:05:40)


Прикрепленные файлы:
Attachment Icon load_data.sql, Размер: 1,459 байт, Скачано: 934

Неактивен

 

#16 07.01.2011 21:14:44

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Работа из .bat файла

Может попробывать переустановить программу ???

Неактивен

 

#17 08.01.2011 04:34:22

Tsvetkov
Участник
Зарегистрирован: 08.01.2011
Сообщений: 14

Re: Работа из .bat файла

Есть пару моментов:
1. данные в базе в кодировке cp1251
2. консоль работает в кодировке cp866

перевидите консоль в винде при помощи команды
chcp 1251

или в начале батника поставьте

Отредактированно Tsvetkov (08.01.2011 04:41:20)

Неактивен

 

#18 08.01.2011 17:33:09

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Работа из .bat файла

Tsvetkov написал:

Есть пару моментов:
1. данные в базе в кодировке cp1251
2. консоль работает в кодировке cp866

перевидите консоль в винде при помощи команды
chcp 1251

или в начале батника поставьте

Спасибо за желание помочь, но всё же проблема немного не в этом.

Неактивен

 

#19 08.01.2011 23:16:35

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Работа из .bat файла

Сегодня переустановил сервер , поставил 5.1. ( в надежде на "излечение" ).

mysql> \s
--------------
C:\MySQL-5.1\bin\mysql.exe  Ver 14.14 Distrib 5.1.31, for Win32 (ia32)

Connection id:          4
Current database:       quality
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.1.31-community MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    cp1251
Db     characterset:    cp1251
Client characterset:    cp1251
Conn.  characterset:    cp1251
TCP port:               3306
Uptime:                 26 min 50 sec

Threads: 1  Questions: 524  Slow queries: 0  Opens: 34  Flush tables: 1  Open tables: 17  Queri
es per second avg: 0.325
--------------


Тем не менее ввожу в MySQL Command Line Client  запрос из файла  load_data.sql и получаю кракозяблы в столбцах таблицы
mysql> select*from `temp_214`;
+----+---------------------+--------+--------+---------+-------+----------+
| id | Дата                | Кокиль | Дефект | Локация | Автор | Стержень |
+----+---------------------+--------+--------+---------+-------+----------+
|  1 | 2011-01-08 23:00:38 |     27 |    751 | 46     | █     | 5        |
|  2 | 2011-01-08 23:00:38 |      2 |    751 | 46     | ╬     | 7        |
|  3 | 2011-01-08 23:00:38 |     69 |    751 | 46     | ▌     | 5        |
|  4 | 2011-01-08 23:00:38 |     23 |    751 | 46     | 7     | 5        |
|  5 | 2011-01-08 23:00:38 |     81 |    751 | 46     | 8     | 5        |
|  6 | 2011-01-08 23:00:38 |      4 |    751 | 46     | ├     | 6        |
|  7 | 2011-01-08 23:00:38 |     29 |    751 | 46     | 2     | 5        |
|  8 | 2011-01-08 23:00:38 |     18 |    751 | 46     | ╓     | 4        |
+----+---------------------+--------+--------+---------+-------+----------+
8 rows in set (0.00 sec)



Запрос же
mysql> source C:/load_data.sql;

приводит к другим результатам
mysql> source C:/load_data.sql;
Database changed
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

ERROR 1054 (42S22): Unknown column '╨Ъ╨╛╨║╨╕╨╗╤М' in 'field list'
ERROR 1054 (42S22): Unknown column '╨Ъ╨╛╨║╨╕╨╗╤М' in 'field list'
ERROR 1054 (42S22): Unknown column '╨Ъ╨╛╨║╨╕╨╗╤М' in 'field list'
Empty set (0.00 sec)

Empty set (0.00 sec)
...
...
...


Не находим какие то колонки ???

Неактивен

 

#20 09.01.2011 02:43:38

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Работа из .bat файла

Погодите, последнюю проблему Вы же уже полечили добавлением кодировок?
Что касается кракозябл — убедитесь, что в файле с данными данные лежат
действительно в cp1251.

Неактивен

 

#21 09.01.2011 03:09:48

Tsvetkov
Участник
Зарегистрирован: 08.01.2011
Сообщений: 14

Re: Работа из .bat файла

Идем на Универсальный декодер кириллицы и преобразуем следующее:

1. 4╧6   
Ставим
1.1 Расширенный режим: исходная кодировка: cp1251
1.2 отображается как: ibm866 ( = cp866)
1.3 жмем ОК - получаем ответ - 4П6

2. ╨Ъ╨╛╨║╨╕╨╗╤М
Ставим
2.1 Расширенный режим: исходная кодировка: utf-8
2.2 отображается как: ibm866 ( = cp866)
2.3 жмем ОК - получаем ответ - Кокиль

Из этого делаем вывод, что у Вас полный разброд в кодировках.

по 1 случаю - команда - chcp 1251 - сразу после запуска консоли, до запуска клиента mysql.exe
по 2 случаю - сохранить load_data.sql в блокноте как ANSI Cyrillic

ps
то , что названия столбцов правильно отображаются при :
mysql> select*from `temp_214`;
+----+---------------------+--------+--------+---------+-------+----------+
| id | Дата                | Кокиль | Дефект | Локация | Автор | Стержень |

это значит , что cp866 символы имен столбцов лежат в таблице с cp1251  кодировкой.

Отредактированно Tsvetkov (09.01.2011 03:25:37)

Неактивен

 

#22 09.01.2011 12:28:57

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Работа из .bat файла

paulus написал:

Погодите, последнюю проблему Вы же уже полечили добавлением кодировок?

Да-да (см. вложение)


Прикрепленные файлы:
Attachment Icon load_data.sql, Размер: 1,488 байт, Скачано: 887

Неактивен

 

#23 09.01.2011 15:31:25

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Работа из .bat файла

paulus написал:

Что касается кракозябл — убедитесь, что в файле с данными данные лежат
действительно в cp1251.

На всякий случай перекодировал файл 214.txt и load_data , как 1251 ANSI Кириллица, однако результата нет.

Отредактированно Twix (09.01.2011 15:32:07)

Неактивен

 

#24 10.01.2011 16:26:27

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Работа из .bat файла

По-моему, мы решаем какую-то другую проблему smile

Можете приложить кусок данных, который не загружается,
сценарий для создания таблицы (структуру) и сценарий для
загрузки? Я тоже попробую это сделать smile

Неактивен

 

#25 10.01.2011 17:32:25

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Работа из .bat файла

Ок !!!
БД во вложении.

Отредактированно Twix (10.01.2011 17:33:20)


Прикрепленные файлы:
Attachment Icon QUALITY.txt, Размер: 6,118 байт, Скачано: 941

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson