42

以下のクエリでテーブルを作成しようとしています

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

このエラーを回避し、クエリを機能させてテーブルを作成する方法を教えてください。

4

8 に答える 8

89

テーブル内のすべてのフィールドの合計サイズが制限の65535を超えているため、このエラーが発生します。

長い文字列textの代わりにtypeを使用する必要があります。varcharすべてvarchar(8000)textに置き換えれば、機能するはずです。

または、「大きすぎる」データ型ではなく、適切なデータ型を使用することをお勧めします。保存するのに8000文字は本当に必要ありませんよcurrencyね?

于 2012-11-08T06:07:29.247 に答える
10

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-大きすぎる

于 2012-11-08T06:18:30.963 に答える
6

65535 バイトは、mysql の最大行サイズです。

utf8mb4 文字セットでは、varchar(255) は、この列が最大で255 * 4 + 1バイトを使用することを意味します。したがって、使用する文字セットテーブルによって異なります。

于 2019-04-15T10:41:18.320 に答える
3

この問題は Laravel で発生し、varchar の代わりに text を使用しました。

于 2020-04-07T16:32:44.063 に答える
0
  • すべてのテーブル (ストレージ エンジンに関係なく) の最大行サイズは 65,535 バイトです。ストレージ エンジンは、この制限に追加の制約を課し、有効な最大行サイズを減らす場合があります。
  • BLOB および TEXT 列は、その内容が行の残りの部分とは別に格納されるため、行サイズの制限に対してそれぞれ 1 から 4 プラス 8 バイトまでカウントされます。
  • 詳細情報 - テーブルの列数と行サイズの制限
于 2016-09-09T07:14:28.057 に答える