Проблема с загрузкой файлов в СУБД MySQL 5.1
Модератор: Модераторы
Проблема с загрузкой файлов в СУБД MySQL 5.1
При попытке загрузки текстового файла в СУБД MySQL 5.1 на ОС ALT Linux 6.0 Centaurus с помощью запроса LOAD DATA LOCAL INFILE вначале выдавалось следующее сообщение:
The used command is not allowed with this MySQL version
После добавления в раздел [client] конфигурационного файла my.cnf строки local-infile=1 данное сообщение пропало, а файл стал загружаться, но только для пользователя root - для обычного пользователя всё оставалось по-прежнему.
После добавления в раздел [mysql] конфигурационного файла пользователя .my.cnf этой же строки эффект возобновился - загрузка стала производиться нормально, но когда указанный запрос был использован для формы в приложении IDE Lazarus, описанная ситуация с этим запросом опять повторилась для оператора SQLQuery1.ExecSQL, в то время как аналогичный запрос INSERT INTO работает без нареканий. В чём причина такого странного поведения запроса в указанной IDE, пока не удалось выяснить. Буду благодарен за любой совет по данной проблеме.
The used command is not allowed with this MySQL version
После добавления в раздел [client] конфигурационного файла my.cnf строки local-infile=1 данное сообщение пропало, а файл стал загружаться, но только для пользователя root - для обычного пользователя всё оставалось по-прежнему.
После добавления в раздел [mysql] конфигурационного файла пользователя .my.cnf этой же строки эффект возобновился - загрузка стала производиться нормально, но когда указанный запрос был использован для формы в приложении IDE Lazarus, описанная ситуация с этим запросом опять повторилась для оператора SQLQuery1.ExecSQL, в то время как аналогичный запрос INSERT INTO работает без нареканий. В чём причина такого странного поведения запроса в указанной IDE, пока не удалось выяснить. Буду благодарен за любой совет по данной проблеме.
Re: Проблема с загрузкой файлов в СУБД MySQL 5.1
Насколько я знаю, чтоб так грузить файл нужно выполнить ряд требований. Например загрузка из файла может быть только на машине, где mysql
Также если не хватает прав может такое быть
Права проверить на файл и у самого аккаунта mysql
Также если не хватает прав может такое быть
Права проверить на файл и у самого аккаунта mysql
Re: Проблема с загрузкой файлов в СУБД MySQL 5.1
vadv55 писал(а):о когда указанный запрос был использован для формы в приложении IDE Lazarus, описанная ситуация с этим запросом опять повторилась для оператора SQLQuery1.ExecSQL, в то время как аналогичный запрос INSERT INTO работает без нареканий. В чём причина такого странного поведения запроса в указанной IDE
Что значит "аналогичный запрос"? Оператор INSERT вообще то не подразумевает вставки чего-то из файла. Оба запроса в студию что ли, чтобы можно было что-то сравнивать.
Обратите внимание на то, как именно вы задаете имя этого самого файла. Также, стоит проверить через FileExists его существование перед загрузкой. Ну и не полагаться на то, что файл будет взят, скажем, из того каталога, в котором располагается ваша откомпилированная программа. Лазарус, ЕМНИП, каталогом запуска ставит корневой каталог проекта.
- Vapaamies
- постоялец
- Сообщения: 292
- Зарегистрирован: 24.07.2012 22:37:59
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Проблема с загрузкой файлов в СУБД MySQL 5.1
vadv55 писал(а):В чём причина такого странного поведения запроса в указанной IDE, пока не удалось выяснить.
Есть уверенность, что используется то же самое клиентское ПО, что и из командной строки, а не его другая копия и/или версия другой разрядности? Настройки правильные?
Re: Проблема с загрузкой файлов в СУБД MySQL 5.1
1. Запрос по команде LOAD DATA LOCAL INFILE:
2. Запрос по команде INSERT INTO:
При этом первый запрос загружает в таблицу tstr содержащий три поля (ind1, ind2, sods) файл из консоли в программе mysql нормально, аварийное сообщение при запуске этого же запроса в указанном коде выдаётся в IDE Lazarus, но где там необходимо настраивать данный запуск - мне неизвестно. Функционально аналогичный ему второй запрос, в котором загрузка каждого поля производится из разных источников, работает безукоризненно.
Код: Выделить всё
const
tc: Char='''';
tv: Char='+';
imk: String='/pub/htmlx.txt';
...
lz:=False;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('LOAD DATA LOCAL INFILE '+tc+imk+tc+' INTO TABLE tstr ');
SQLQuery1.SQL.Add('FIELDS TERMINATED BY '+tc+tv+tc+' LINES ');
SQLQuery1.SQL.Add('TERMINATED BY '+tc+tv+tc+' (ind1,ind2,sods);');
try
SQLQuery1.ExecSQL;
except
ShowMessage('SQLI!');
lz:=True
end;
if lz then goto z;
...
2. Запрос по команде INSERT INTO:
Код: Выделить всё
lz:=False;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('SET NAMES utf8');
try
SQLQuery1.ExecSQL;
except
ShowMessage('SQLN!');
lz:=True
end;
if lz then goto z;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('SET CHARACTER SET utf8');
try
SQLQuery1.ExecSQL;
except
ShowMessage('SQLC!');
lz:=True
end;
if lz then goto z;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('INSERT INTO tstr (ind1,ind2,sods) VALUES');
SQLQuery1.SQL.Add('(:pind1,:pind2,:psods);');
SQLQuery1.Params.ParamByName('pind1').Value:=Edit1.Text;
SQLQuery1.Params.ParamByName('pind2').Value:=Edit2.Text;
SQLQuery1.Params.CreateParam(ftMemo,'psods',ptInput);
SQLQuery1.Params.ParamByName('psods').LoadFromFile(imk1,ftMemo);
try
SQLQuery1.ExecSQL;
except
ShowMessage('SQLI!');
lz:=True
end;
if lz then goto z;
...
При этом первый запрос загружает в таблицу tstr содержащий три поля (ind1, ind2, sods) файл из консоли в программе mysql нормально, аварийное сообщение при запуске этого же запроса в указанном коде выдаётся в IDE Lazarus, но где там необходимо настраивать данный запуск - мне неизвестно. Функционально аналогичный ему второй запрос, в котором загрузка каждого поля производится из разных источников, работает безукоризненно.
- Vapaamies
- постоялец
- Сообщения: 292
- Зарегистрирован: 24.07.2012 22:37:59
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Проблема с загрузкой файлов в СУБД MySQL 5.1
А с настройками клиента и сервера что?
Re: Проблема с загрузкой файлов в СУБД MySQL 5.1
1. /var/lib/mysql/my.cnf
2. /home/user/.my.cnf
Код: Выделить всё
[mysqld]
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
# FIXME! bdb maybe work on x86/Linux and amd64/Linux
#skip-bdb
chroot=/var/lib/mysql
datadir=/db
#bdb-logdir=/log
#log=/log/queries
pid-file=/mysqld.pid
skip-locking
#skip-networking
port=3306
socket=/mysql.sock
tmpdir=/tmp
default-character-set=utf8
local-infile=1
character_set_filesystem=utf8
user=mysql
[client]
local-infile=1
default-character-set=utf82. /home/user/.my.cnf
Код: Выделить всё
[mysql]
local-infile=1
default-character-set=utf8- Vapaamies
- постоялец
- Сообщения: 292
- Зарегистрирован: 24.07.2012 22:37:59
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Проблема с загрузкой файлов в СУБД MySQL 5.1
Странно. Могу посоветовать лишь поискать другую версию/сборку клиентских библиотек MySQL, в них время от времени случаются странные глюки. Даже тут на форуме что-то было.
