MySQLのドキュメント には、4つのTEXT型があります。
文字エンコードがUTF-8であると仮定して、各データ型の列に格納できる最大長はいくつですか?
を入力します。最大長 ----------- + ------------------------------- ------ TINYTEXT | 255(2 8−1)バイト TEXT | 65,535(216−1)バイト= 64KiB [...] MEDIUMTEXT | 1。 16,777,215(224−1)バイト= 16MiB [....] LONGTEXT | 4,294,967,295(232−1)バイト= 4GiB [...]
カラムに格納できる 文字 の数は、 文字エンコーディング によって異なります。
同じ答えの拡大
このIS素早い判断のための大まかな推定表!
x-x
Type | A= worst case (x/3) | B = best case (x) | words estimate (A/4.5) - (B/4.5)
-----------+---------------------------------------------------------------------------
TINYTEXT | 85 | 255 | 18 - 56
TEXT | 21845 | 65,535 | 4854.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
@ 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
英語では、単語ごとに4.8文字がおそらく平均的です(たとえば、 norvig.com/mayzner.html )。ただし、単語の長さはドメインによって異なります(例:話し言葉と学術論文)なので、あまり正確に説明しても意味がありません。英語はほとんどがシングルバイトASCII文字であり、非常にまれにマルチバイト文字を使用するため、1文字あたり1バイトに近い値です。単語間スペースには余分な文字を許可する必要があるため、単語あたり5.8バイトから切り捨てました。たとえばポーランド語などのアクセントの多い言語では、格納する単語がわずかに少なくなります。長い言葉でドイツ語。
ギリシャ語、アラビア語、ヘブライ語、ヒンディー語、タイ語などのマルチバイト文字を必要とする言語は、通常UTF-8で1文字につき2バイトを必要とします。 1ワードあたり5文字と乱暴に推測して、1ワードあたり11バイトから切り捨てました。
CJKスクリプト(漢字、漢字、ひらがな、カタカナなど)私は何も知りません。文字は主にUTF-8で3バイトを必要とし、(大幅に簡略化されている)Wordごとに約2文字を使用すると見なされる可能性があるため、他の2つの間にあると考えられます。 (CJKスクリプトは、UTF-16を使用した場合、必要なストレージが少なくなる可能性があります)。
これはもちろん、ストレージのオーバーヘッドなどを無視しています。
これはいいのですが、質問には答えません:
「TINYTEXTの代わりにVARCHARを常に使用する必要があります。」データがレコードから格納されるため、Tinytextは広い行がある場合に便利です。パフォーマンスのオーバーヘッドがありますが、それには用途があります。