Размер строки слишком большой ошибки в mysql create table query

Я пытаюсь создать таблицу с приведенным ниже запросом

Create Table PerformaceReport
(
campaignID int,
keywordID bigint,
keyword varchar(8000),
avgPosition decimal(18,6),
cost int,
clicks int,
 conv1PerClick int, 
 impressions int,
  day datetime,
  currency varchar(8000),
  account varchar(8000),
   timeZone varchar(8000),
    adGroup varchar(8000),
    adGroupState varchar(8000),
     approvalStatus varchar(8000),
     lowestPosition varchar(8000),
     campaign varchar(8000),
      campaignState varchar(8000),
       convManyPerClick int,
       totalConvValue decimal(18,6),
        maxCPCSource varchar(8000),
         clientName varchar(8000),
          destinationURL varchar(8000),
           device varchar(8000),
           firstPageCPC int,
            isNegative bit,
             matchType varchar(8000),
              maxCPC varchar(8000),
               maxCPM varchar(8000),
               highestPosition varchar(8000),
               qualityScore int,
               keywordState varchar(8000),
               viewThroughConv int)

И я получаю ошибку ниже

#1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs

Может кто-нибудь, пожалуйста, дайте мне знать, как избежать этой ошибки и заставить запрос работать, чтобы создать таблицу.

Ответ 1

Общий размер всех полей в таблице больше предела, 65535, поэтому вы получаете эту ошибку.

Для длинных строк используйте text вместо varchar. Замените все varchar(8000) на text, и он должен работать.

Или, что еще лучше, используйте соответствующие типы данных вместо "слишком больших". Вам не нужно 8000 символов для хранения currency, не так ли?

Ответ 2

Используйте TEXT вместо VARCHAR. Потому что вы превышаете максимальный размер строки. если вы используете TEXT, он предназначен для больших текстовых столбцов. Максимальный размер VARCHAR равен 65535. создайте столбец с varchar(65535), но он должен быть единственным столбцом в таблице.

или

проблема - это ограничение размера строки для таблиц innodb, ниже ссылки вы можете найти некоторые подходы для решения этой проблемы:

http://www.mysqlperformanceblog.com/2011/04/07/innodb-row-size-limitation/ https://dba.stackexchange.com/questions/6598/innodb-create-table-error-row-size-too-large

Ответ 3

Я согласен с ответом на использование столбцов соответствующего размера и TEXT над VARCHAR в качестве первого шага, но если вы все еще нажимаете ограничения, вы можете изменить настройки сортировки для этой таблицы, если используете UTF-8 или другой набор символов с более чем одним байтом на символ и не нуждается в нем (например, только для хранения текста на английском языке). Я сделал это, чтобы обойти ограничения, которые вы нажимаете на очень широкий стол. Здесь более подробно.

Различия между utf8 и latin1

Ответ 4

  • Каждая таблица (независимо от механизма хранения) имеет максимальный размер строки 65 535 байт. Двигатели хранения могут устанавливать дополнительные ограничения на этот предел, уменьшая эффективный максимальный размер строки.
  • BLOB и TEXT столбцы подсчитываются от одного до четырех плюс восемь байтов каждый в направлении ограничение размера строки, поскольку их содержимое хранится отдельно от остаток строки.
  • подробная информация - Ограничения на количество столбцов столбцов и размер строки

Ответ 5

65535 байт - это максимальный размер строки для mysql.

В кодировке utf8mb4 varchar (255) означает, что в этом столбце не более 255 * 4 + 1 байт. Так что это зависит от того, какую таблицу символов использовать.

Ответ 6

Попробуйте изменить механизм хранения на CSV.