Как я могу решить MySql Ошибка: слишком большой размер строки? - PullRequest
0 голосов
/ 10 октября 2019

У меня проблемы с размером строки в mysql. В таблице моей БД я храню картинку в поле среднего размера (16 МБ). Первая версия кода вызвала ошибку в размере строки, поэтому я пытаюсь установить innodb_large_prefix и изменить формат строки на динамический. Это код:

set global innodb_large_prefix = 1;

Create table if not exists `Pictures`
(
    `Id` int(11) NOT NULL AUTO_INCREMENT,
    `Size` int NOT NULL,
    `Type` varchar(25) NOT NULL,
    `isUserpic` tinyint DEFAULT false,
    `Likes` int(11) DEFAULT 0,           
    `Pic` mediumblob NOT NULL,          
    `Date` timestamp NOT NULL,
    `User` int(11) NOT NULL,
    PRIMARY KEY(`Id`)
)engine=InnoDb default charset=latin1 ROW_FORMAT=DYNAMIC;

Когда я пытаюсь вставить изображение размером более 500-600 КБ, я получаю следующую ошибку (аналогичную предыдущей):

Ошибка: слишком большой размер строки (> 8126). Может помочь изменение некоторых столбцов на TEXT или BLOB или использование ROW_FORMAT = DYNAMIC или ROW_FORMAT = COMPRESSED. В текущем формате строки префикс BLOB размером 768 байт хранится в строке.

Чтобы исправить это, я пытаюсь с помощью:

    set global innodb_file_format = Barracuda;
    set global innodb_file_format_max = Barracuda;
    set global innodb_file_per_table = 1;

, а затем также меняя формат строки:

ROW_FORMAT = COMPRESSED;

Но это решение тоже не работает, поэтому я меняю движок таблицы с InnoDB на MyISAM: ошибка изменилась, и теперь она есть (я пытаюсь вставить изображение размером 1,63 МБ):

MySql Server ушел

Как я могу устранить ошибку о размере строки? Если решение использует MYISAM в качестве движка, как я могу исправить ошибку и почему сервер "ушел"?

...