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

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

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

Вы не зашли.

#1 25.07.2011 18:27:11

ady
Завсегдатай
Зарегистрирован: 02.04.2007
Сообщений: 38

Как задать кодировку sql файла для загрузки данных?

Есть sql файл с INSERT-ами в кодировке cp1251.

Как загрузить эти данные в базу?

Пробовал: (1) mysql -u user -p --default-character-set=cp-1251 dbname <file.sql
и
(2) вставить: set character_set_client='cp1251';SET NAMES cp1251; в начале файла.

Не помогло.

Неактивен

 

#2 25.07.2011 18:34:17

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Как задать кодировку sql файла для загрузки данных?

SET NAMES cp1251; в начале файла должно сработать

Нужно есть посмотреть тип таблицы - в ней текстовые поля должны быть не в latin1 (cp1251, utf8, koi8r подойдет)

Неактивен

 

#3 25.07.2011 18:55:24

ady
Завсегдатай
Зарегистрирован: 02.04.2007
Сообщений: 38

Re: Как задать кодировку sql файла для загрузки данных?

Не помогает. Вот этот запрос вылетает с ошибкой:

SET NAMES cp1251;INSERT INTO DataField (Field_id,Task_id,FieldType_id,FieldName,PublicFieldName,IsInputField,isConstantField,DefaultValue,minValue,maxValue) VALUES
(4101,40,1,'FT1','коэффициент',1,0,0.0,1.001,100.0);
 


Ошибка:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; ch
eck the manual that corresponds to your MySQL server version for the r
ight syntax to use near 'maxValue) VALUES
(4101,40,1,'
FT1','ъю¤ЇЇшЎшхэЄ' at line 1


У таблицы default-collation - UTF-8.

Отредактированно ady (25.07.2011 18:57:05)

Неактивен

 

#4 25.07.2011 19:15:38

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Как задать кодировку sql файла для загрузки данных?

Запрос работающий, а возникает синтаксическая ошибка, это странно. Выложи файл на форум (и SHOW CREATE TABLE для таблицы)

Неактивен

 

#5 25.07.2011 19:36:19

ady
Завсегдатай
Зарегистрирован: 02.04.2007
Сообщений: 38

Re: Как задать кодировку sql файла для загрузки данных?

Запрос я выше уже написал. А SHOW CREATE TABLE следующий:

CREATE TABLE `DataField` (
  `Field_ID` int(11) NOT NULL,
  `Task_ID` int(11) NOT NULL,
  `FieldType_ID` int(11) DEFAULT NULL,
  `isInputField` int(11) NOT NULL,
  `FieldName` varchar(50) CHARACTER SET cp1251 DEFAULT NULL,
  `PublicFieldName` varchar(200) CHARACTER SET cp1251 DEFAULT NULL,
  `ShowOrder` int(11) DEFAULT NULL,
  `isConstantField` int(11) DEFAULT NULL,
  `DefaultValue` float DEFAULT NULL,
  `minValue` float DEFAULT NULL,
  `maxValue` float DEFAULT NULL,
  `isInteger` int(11) DEFAULT NULL,
  PRIMARY KEY (`Field_ID`,`Task_ID`),
  KEY `fk_DataField_Task1` (`Task_ID`),
  KEY `fk_DataField_FieldType1` (`FieldType_ID`),
  KEY `FK60641B50C63ADF64` (`FieldType_ID`),
  CONSTRAINT `FK60641B50C63ADF64` FOREIGN KEY (`FieldType_ID`) REFERENCES `fieldtype` (`FieldType_ID`),
  CONSTRAINT `fk_DataField_FieldType1000` FOREIGN KEY (`FieldType_ID`) REFERENCES `fieldtype` (`FieldType_ID`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_DataField_Task1000` FOREIGN KEY (`Task_ID`) REFERENCES `task` (`Task_ID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Неактивен

 

#6 25.07.2011 19:46:23

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Как задать кодировку sql файла для загрузки данных?

Записал запрос в файл, все вставилось без ошибки:
mysql test < 1251.txt

$ mysql test -Nbe "SET NAMES utf8;SELECT * from DataField"
+------+----+------+---+------+------------------------+------+------+------+-------+------+------+
| 4101 | 40 |    1 | 1 | FT1  | коэффициент | NULL | 0    | 0    | 1.001 | 100  | NULL |
+------+----+------+---+------+------------------------+------+------+------+-------+------+------+

Давай файл все-таки, с ним что-то не так.

Неактивен

 

#7 26.07.2011 14:39:32

ady
Завсегдатай
Зарегистрирован: 02.04.2007
Сообщений: 38

Re: Как задать кодировку sql файла для загрузки данных?

Хм. Странная фигня. Создал новую базу с этой таблицей. На вставление вылетает та же ошибка.

E:\...\sql_new>mysql -u root -p test2 <test.sql
Enter password:
ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; ch
eck the manual that corresponds to your MySQL server version for the r
ight syntax to use near 'maxValue) VALUES
(4101,40,1,'
FT1','ъю¤ЇЇшЎшхэЄ эр яхЁтє■ ъю' at line 1


В test.sql в точности этот запрос:

SET NAMES cp1251;
INSERT INTO DataField (Field_id,Task_id,FieldType_id,FieldName,PublicFieldName,IsInputField,isConstantField,DefaultValue,minValue,maxValue) VALUES
(4101,40,1,'FT1','коэффициент на первую команду',1,0,0.0,1.001,100.0);
 


Ладно, буду дальше думать, в чем может быть причина.

Я уже подготовил данные в CSV и думаю так их загрузить.

Неактивен

 

#8 26.07.2011 15:12:02

ady
Завсегдатай
Зарегистрирован: 02.04.2007
Сообщений: 38

Re: Как задать кодировку sql файла для загрузки данных?

Победил загрузкой через CSV. Там тоже mysql сначала ругался на maxValue, но после его откидывания, удаления пары FK и использования магии высокого уровня REPLACE smile все прошло.

Неактивен

 

#9 26.07.2011 15:17:08

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Как задать кодировку sql файла для загрузки данных?

В файле могут быть невидимые символы и еще обрати внимание на перенос строки - как он выполнен?

Неактивен

 

Board footer

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