Mysql Ошибка 1064 при использовании ключевого слова «SET» в «LOAD DATA LOCAL INFILE» для столбца BLOB-объекта - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь вставить таблицу из файла, используя 'LOAD DATA LOCAL INFILE'.Я могу вставить другие мои таблицы, но у меня возникла проблема с таблицей, содержащей столбец BLOB-объектов.

Значение BLOB-объекта в файле сохраняется как шестнадцатеричное значение, и каждый столбец разделяется ,символ.

Я слежу за ответом здесь

Версия сервера Mysql - 5.6.44

Это определение таблицы

CREATE TABLE `tx_bin` (
  `hash_id` bigint(20) unsigned NOT NULL,
  `block_height` bigint(20) NOT NULL,
  `binary` blob NOT NULL,
  PRIMARY KEY (`hash_id`, `block_height`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

И это пример значения в файле, который я использую для вставки в таблицу

4,1,01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000
7,2,01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000
10,3,01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000

И это синтаксис, который я использовал

LOAD DATA LOCAL INFILE '/work/bootstrap/10000/tx_bin' 
INTO TABLE tx_bin FIELDS TERMINATED BY ',' 
(hash_id,block_height,@bin) 
SET binary=UNHEX(@bin);

Ошибка Iполучаю

ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с «двоичным = UNHEX (@bin)» в строке 1

Если я удаляю SET binary, то вставка прошла успешно(но без двоичных данных).

LOAD DATA LOCAL INFILE '/work/bootstrap/10000/tx_bin' 
INTO TABLE tx_bin FIELDS TERMINATED BY ',' 
(hash_id,block_height,@bin);

Затем я попытался использовать SET, но в другом столбце, это также успешно.

LOAD DATA LOCAL INFILE '/work/bootstrap/10000/tx_bin' 
INTO TABLE tx_bin FIELDS TERMINATED BY ',' 
(hash_id,@height,@bin) 
SET block_height=@height;

Если я добавлю столбец blob снова после другого столбца, это также дает мне ту же ошибку

LOAD DATA LOCAL INFILE '/work/bootstrap/10000/tx_bin' 
INTO TABLE tx_bin FIELDS TERMINATED BY ',' 
(hash_id,@height,@bin) 
SET block_height=@height, binary=UNHEX(@bin);

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 18 июня 2019

BINARY является зарезервированным словом в MySQL и должно быть заключено в кавычки при использовании в качестве имени поля.

LOAD DATA LOCAL INFILE '/work/bootstrap/10000/tx_bin' 
INTO TABLE tx_bin FIELDS TERMINATED BY ',' 
(hash_id,block_height,@bin) 
SET `binary`=UNHEX(@bin);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...