h.m.f.
|
|
« : 26-04-2006 04:50 » |
|
Есть файл *.dbf (один столбец в нем дробное число) его нужно подгрузить в MySql. Конвертирую dbf в txt (select * from ... и результат запроса записываю как строку в файл). При подгрузке в MySql текстового файла (load data infile) получаю исключение: Data Truncated from столбец в котором находится дробное число. В таблице MySql тип данных неподгружаемого столба double, в dbf не знаю какой тип, т.к. запрос describe table вызывает исключение.
|
|
|
Записан
|
|
|
|
RomCom
|
|
« Ответ #1 : 26-04-2006 05:12 » |
|
Возможно разделитель дробной части не нравится. А не проще на самом сервере средствами php открыть *.dbf и переписать в MySql?
|
|
|
Записан
|
R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
|
|
|
Mouse
Молодой специалист
Offline
|
|
« Ответ #2 : 26-04-2006 06:34 » |
|
h.m.f., в сети можно найти готовые конвертеры DBF -> mySQL, поищи. Если что, вечерком могу поискать у себя, вроде должны быть исходники на PHP
|
|
|
Записан
|
|
|
|
h.m.f.
|
|
« Ответ #3 : 26-04-2006 06:47 » |
|
Когда я формирую текстовый файл, специально заменяю запятую на точку, чтобы не было проблем в MySql. Мне кажется, что проблема в количестве знаков после запятой или разрядности типов... Подгрузка в MySql текстового файла - часть кода программы (которая написана на C# поэтому промежуточный пункт с использованием пхп и различных вспомогательных программ отпадает (к тому же скачанная программка dbf2mysql работает для моей таблички 1.5часа!!! против моих нескольких минут(если не подгружать этот фигов столбец с дробными числами) )
|
|
|
Записан
|
|
|
|
RomCom
|
|
« Ответ #4 : 26-04-2006 06:50 » |
|
приведи пример пары строк файла txt и желательно кусок кода C# вставляющий данные а то так долго гадать можно.
|
|
« Последнее редактирование: 26-04-2006 06:53 от RomCom »
|
Записан
|
R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #5 : 26-04-2006 06:58 » |
|
В MySQL очень простая интерпретация аргументов: если аргумент не может быть распознан как целое число, как строка и т.д., то он считается _действительным_числом_ и если его формат не напоминает соотв. число, то результат == 0. Так было сказано в документации еще по 3.23 - стоит проверить для своей версии.
h.m.f., приведи текст ошибки и строку, на которой сбойнуло.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
h.m.f.
|
|
« Ответ #6 : 26-04-2006 07:49 » |
|
Пара строк (данные разделены табами): 5741А13В1.6-40/ФЛ Комплект ответных фланцев с крепежом к насосу А1 3В1.6/40 5741 1 38.86 5741А13В1.6/40 Насос А1 3В1.6/40-3/25Б, 7.5 кВт, без КИП, "Ливгидромаш" 5741 1 3550 В принципе любая строка файла вызывает данное исключение даже если в последнем столбце стоит 0.
Код который вставляет: string CatTextFile=@"c:\\odbcTablesFormat.txt"; MyCmd.CommandText="load data infile '" + CatTextFile + "' into table rs.cat"; MyCmd.ExecuteNonQuery(); Версия MySql 5
|
|
« Последнее редактирование: 19-12-2007 19:28 от Алексей1153++ »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #7 : 26-04-2006 08:03 » |
|
h.m.f., полный текст ошибки приведи. В результате ни одна строка не вставлена?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
h.m.f.
|
|
« Ответ #8 : 26-04-2006 08:42 » |
|
An unhandled exception of type 'MySql.Data.MySqlClient.MySqlException' occurred in mysql.data.dll
Additional information: #01000Data truncated for column 'price' at row 1
|
|
« Последнее редактирование: 19-12-2007 19:31 от Алексей1153++ »
|
Записан
|
|
|
|
h.m.f.
|
|
« Ответ #9 : 26-04-2006 13:19 » |
|
Если в таблице MySql поменять тип последнего столбца с double на varchar, то текстовый файл подгружается без проблем. Хотя хочется понять с чем всетаки связан этот глюк...
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #10 : 26-04-2006 20:46 » |
|
h.m.f., а как на счет содержимого (после смены на varchar)? Приведи те же строчки, что соответствуют исходным, приведенным выше. Просто, сдается мне, затык в распозновании границ полей в исходном файле.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
h.m.f.
|
|
« Ответ #11 : 27-04-2006 04:13 » |
|
Строки из таблицы MySQl:
5741А13В1.6-40/ФЛ Комплект ответных фланцев с крепежом к насосу А1 3В1.6/40 5741 1 38.86 5741А13В1.6/40 Насос А1 3В1.6/40-3/25Б, 7.5 кВт, без КИП, "Ливгидромаш" 5741 1 3550
Пока их сюда копировал, заметил что в последнем столбце после самих данных стоит еще и пробел (в остальных столбах такого не наблюдается), а в текстовом файле пробелов нет...
|
|
|
Записан
|
|
|
|
RomCom
|
|
« Ответ #12 : 27-04-2006 04:56 » |
|
Протестировал приведенные строка через phpMyAdmin (MySQL 3.23.53), все нормально отрабатывает. Попробуй в файле оставить одну страку и запустить вставку. а в текстовом файле пробелов нет...
Проверь в редакторе показывающем не печатные символы. Возможно всетаки где то закрался ненужный пробел. Или приаттач кусок самого файла нам на проверку на наших машинах
|
|
|
Записан
|
R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
|
|
|
h.m.f.
|
|
« Ответ #13 : 27-04-2006 05:26 » |
|
Таблица МуSQL: CREATE TABLE `cat` ( `ware` varchar(30) NOT NULL, `warename` varchar(250) default NULL, `head` varchar(30) default NULL, `base` int(11) default NULL, `price` double default NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1 Код c# уже описал, текстовый файл во вложении...
|
|
|
Записан
|
|
|
|
RomCom
|
|
« Ответ #14 : 27-04-2006 06:18 » |
|
через phpMyAdmin: load data infile 'd:\\odbcTablesFormat.txt' into table cat; Вставляется без проблем
|
|
« Последнее редактирование: 19-12-2007 19:32 от Алексей1153++ »
|
Записан
|
R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
|
|
|
h.m.f.
|
|
« Ответ #15 : 27-04-2006 08:56 » |
|
RomCom, а какая у тебя версия MySql? У меня этот запрос написанный в чистом mySql 5 (без С#) с этим файлом все равно выдает data truncated...
|
|
|
Записан
|
|
|
|
RomCom
|
|
« Ответ #16 : 28-04-2006 00:36 » |
|
Запрос я выполнял на локальном компе где установлен Денвер -phpMyAdmin 2.5.6, MySQL 3.23.53-max
|
|
|
Записан
|
R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
|
|
|
h.m.f.
|
|
« Ответ #17 : 09-06-2006 07:37 » |
|
Наконец-то нашел решение этой проблемы!!!
Нашел на каком-то сайте: если у вас MySql 5 версии из значения переменной sql-mode файла my.ini нужно убрать STRICT_TRANS_TABLES.
Может кто-нибудь пояснить, что за значение такое и на что оно влияет. Я его удалил и все заработало, но кто знает, может в будущем возникнет другой глюк из-за ее отсутствия
|
|
|
Записан
|
|
|
|
|