876

MySQL docsによると、4 つの TEXT タイプがあります。

  1. 小さなテキスト
  2. 文章
  3. 中文
  4. ロングテキスト

文字エンコーディングが UTF-8 であると仮定して、各データ型の列に格納できる最大長は?

4

4 に答える 4

1644

ドキュメント(MySQL 8)から:

      タイプ| 最大長
----------- + --------------------------------------
  TINYTEXT | 255(2 8 -1)バイト
      テキスト| 65,535(2 16 -1)バイト= 64 KiB
MEDIUMTEXT | 16,777,215(2 24 -1)バイト= 16 MiB
  ロングテキスト| 4,294,967,295(2 32 -1)バイト= 4 GiB

列に格納できる文字数は、文字エンコードによって異なることに注意してください。

于 2012-12-18T12:18:06.890 に答える
272

同じ答えの展開

  1. このSO 投稿では、オーバーヘッドとストレージ メカニズムについて詳しく説明しています。
  2. ポイント (1) で述べたように、TINYTEXT の代わりに常に VARCHAR を使用する必要があります。ただし、VARCHAR を使用する場合、最大行サイズは 65535 バイトを超えてはなりません。
  3. ここで概説されているようにhttp://dev.mysql.com/doc/refman/5.0/en/charset-unicode-utf8.html、utf-8 の最大 3 バイト。

これは、迅速な決定のための大まかな見積もり表です!

  1. したがって、最悪の場合の想定 (utf-8 文字あたり 3 バイト) から最良のケース (utf-8 文字あたり 1 バイト) まで
  2. 英語は単語あたり平均 4.5 文字であると仮定します。
  3. x は割り当てられたバイト数です

xx

      Type | A= worst case (x/3) | B = best case (x) | words estimate (A/4.5) - (B/4.5)
-----------+---------------------------------------------------------------------------
  TINYTEXT |              85     | 255               | 18 - 56
      TEXT |          21,845     | 65,535            | 4,854.44 - 14,563.33  
MEDIUMTEXT |       5,592,415     | 16,777,215        | 1,242,758.8 - 3,728,270
  LONGTEXT |   1,431,655,765     | 4,294,967,295     | 318,145,725.5 - 954,437,176.6

Chris V の回答も参照してください: https://stackoverflow.com/a/35785869/1881812

于 2014-04-19T12:18:30.700 に答える
53

@Ankan-Zerob の課題に立ち向かうために、これはワード単位で測定された各テキスト タイプに格納できる最大長の見積もりです。

      Type |         Bytes | English words | Multi-byte words
-----------+---------------+---------------+-----------------
  TINYTEXT |           255 |           ±44 |              ±23
      TEXT |        65,535 |       ±11,000 |           ±5,900
MEDIUMTEXT |    16,777,215 |    ±2,800,000 |       ±1,500,000
  LONGTEXT | 4,294,967,295 |  ±740,000,000 |     ±380,000,000

英語では、1 単語あたり 4.8 文字がおそらく適切な平均です (例: norvig.com/mayzner.html )。ただし、単語の長さはドメイン (例: 話し言葉と学術論文) によって異なります。したがって、正確すぎても意味がありません。英語はほとんどが 1 バイトの ASCII 文字であり、非常にまれにマルチバイト文字が含まれているため、1 文字あたり 1 バイトに近くなっています。単語間のスペースには余分な文字を許可する必要があるため、1 単語あたり 5.8 バイトから切り捨てました。ポーランド語などのアクセントの多い言語は、より長い単語を持つドイツ語のように、わずかに少ない単語を保存します。

ギリシャ語、アラビア語、ヘブライ語、ヒンディー語、タイ語などのマルチバイト文字を必要とする言語では、通常、UTF-8 で 1 文字あたり 2 バイトが必要です。1 単語あたり 5 文字と大雑把に推測して、1 単語あたり 11 バイトから切り捨てました。

CJK スクリプト (漢字、漢字、ひらがな、カタカナなど) 私は何も知りません。UTF-8 ではほとんどの場合文字に 3 バイトが必要であり、(大幅に簡略化すると) 1 単語あたり約 2 文字を使用すると見なされる可能性があるため、他の 2 つの間のどこかにあると考えられます。(CJK スクリプトは、UTF-16 を使用すると必要なストレージが少なくなる可能性があります)。

もちろん、これはストレージのオーバーヘッドなどを無視しています。

于 2016-03-04T00:33:26.057 に答える