Как исправить «ОШИБКА 1118 (42000): слишком большой размер строки (> 8126)» с MariaDB 5.5? - PullRequest
0 голосов
/ 03 апреля 2019

Я загружаю файл CSV с 314 столбцами на сервер MariaDB 5.5. В настоящее время мой код выглядит так:

CREATE TABLE table_name
   (column_1 TEXT,
    column_2 TEXT,
    ...
    column_314 TEXT)
ROW_FORMAT=DYNAMIC;
LOAD DATA LOCAL INFILE filepath  
INTO TABLE table_name 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 ROWS;

Это приводит к следующей ошибке:

ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB
may help. In current row format, BLOB prefix of 0 bytes is stored inline.

Я использую формат файла Barracuda InnoDB с включенным файлом для каждой таблицы:

innodb_file_format=Barracuda
innodb_file_per_table=1

Я полагаю, что проблема в размере страницы innodb, которая установлена ​​в 16 КБ. Поскольку я работаю на MariaDB 5.5, а не на 10.1+, я не верю, что есть способ увеличить размер страницы. База данных управляется организацией и в настоящее время не может быть обновлена ​​до более новой версии.

1 Ответ

0 голосов
/ 09 мая 2019

314 столбцов в «слишком много».Но, поскольку разбить его на CSV-файл довольно сложно, вот несколько мыслей о том, что может помочь вам загрузить его с таким количеством столбцов:

  • Обязательноиспользуйте целые числа минимального размера: TINYINT UNSIGNED равен только 1 байту и допускает числа 0..255.См. Руководство для других размеров.
  • Обязательно используйте минимальный размер VARCHARs: не говорите просто "1010 *" за все.Если вы снимаете недостаточно, вы получите усечение, поэтому для определения наилучших размеров может потребоваться пара проходов.
  • Используйте CHARACTER SET latin1 для любых столбцов, которые, как вы знаете, являются только английскими или даже западнымиЕвропейский.В противном случае используйте utf8 или utf8mb4, где это необходимо.
  • Избегайте TEXT и BLOB, если в этом нет необходимости.

Покажите нам образец данных;у нас могут быть дополнительные советы.

(Вы могли бы поднять ограничение 16 КБ до 64 КБ, но это навсегда изменило бы ограничение для всей таблицы. Вряд ли кто-то сделает это. Я не знаюопасности, если таковые имеются.)

...