Tinytext, TEXT, MEDIUMTEXT i LONGTEXT maksymalne rozmiary pamięci masowej

Na dokumenty MySQL istnieją cztery typy tekstu:

  1. TINYTEXT
  2. tekst
  3. MEDIUMTEXT
  4. LONGTEXT

Jaka jest maksymalna długość, jaką mogę zapisać w kolumnie każdego typu danych zakładając, że kodowanie znaków to UTF-8?

 644
Author: James, 2012-12-18

4 answers

Z dokumentacji:

      Type | Maximum length
-----------+-------------------------------------
  TINYTEXT |           255 (2 8−1) bytes
      TEXT |        65,535 (216−1) bytes = 64 KiB
MEDIUMTEXT |    16,777,215 (224−1) bytes = 16 MiB
  LONGTEXT | 4,294,967,295 (232−1) bytes =  4 GiB

Zauważ, że liczba znaków , które mogą być zapisane w Twojej kolumnie, zależy od kodowania znaków .

 1294
Author: Bridge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-25 13:49:54

Rozszerzenie tej samej odpowiedzi

  1. This SO post : Varchar (255) vs tinytext / tinyblob and VARCHAR(65535) vs blob / text szczegółowo przedstawia koszty ogólne i mechanizmy przechowywania.
  2. Jak wspomniano w punkcie (1), VARCHAR powinien być zawsze używany zamiast TINYTEXT. Jednak przy użyciu VARCHAR, maksymalny rozmiar wiersza nie powinien przekraczać 65535 bajtów.
  3. jak opisano tutaj http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-utf8.html , max 3 bajty dla utf-8.

TO JEST PRZYBLIŻONA TABELA SZACOWANIA DLA SZYBKICH DECYZJI!

  1. więc założenia o najgorszym przypadku (3 bajty na znak utf-8) do najlepszego przypadku (1 bajt na znak utf-8)
  2. zakładając, że język angielski ma średnio 4,5 litery na słowo
  3. x jest liczbą przydzielonych bajtów

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

Proszę odnieść się również do odpowiedzi Chrisa V: https://stackoverflow.com/a/35785869/1881812

 201
Author: Ankan-Zerob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:29

Podchodząc do wyzwania @ Ankan-Zerob, oto moje oszacowanie maksymalnej długości, która może być przechowywana w każdym typie tekstu mierzonej w słowach :

      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

W angielskim , 4,8 liter na słowo to prawdopodobnie dobra średnia (np norvig.com/mayzner.html ), chociaż długość słów będzie się różnić w zależności od dziedziny (np. język mówiony vs. prace naukowe), więc nie ma sensu być zbyt precyzyjnym. Angielski jest w większości jednobajtowe znaki ASCII, z bardzo okazjonalnie wielobajtowe znaki, tak bliskie jednemu bajtowi na literę. Dodatkowy znak musi być dozwolony dla spacji między wyrazami, więc zaokrągliłem w dół z 5.8 bajtów na słowo. Języki z dużą ilością akcentów, np. Polski przechowywałyby nieco mniej słów, podobnie jak np. niemiecki z dłuższymi wyrazami.

Języki wymagające wielobajtowych znaków, takich jak grecki, arabski, hebrajski, Hindi, Tajski itp., itd. zazwyczaj wymagają dwóch bajtów na znak w UTF-8. Zgaduję dziko po 5 liter na słowo, zaokrąglam w dół z 11 bajtów na słowo.

Skrypty CJK (Hanzi, Kanji, Hiragana, Katakana, itp.) nic o tym Nie wiem; wierzę, że znaki w UTF-8 w większości wymagają 3 bajtów i (z dużym uproszczeniem) można uznać, że używają około 2 znaków na słowo, więc byłyby gdzieś pomiędzy dwoma pozostałymi. (Skrypty CJK mogą wymagać mniej miejsca przy użyciu UTF-16, w zależności).

Jest to oczywiście ignorowanie kosztów ogólnych przechowywania itp.

 31
Author: ChrisV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-04 00:33:26

To jest fajne ale nie odpowiada na pytanie:

" VARCHAR powinien być zawsze używany zamiast TINYTEXT."Tinytext jest przydatny, jeśli masz szerokie wiersze - ponieważ dane są przechowywane poza rekordem. Jest wydajność nad głową, ale ma zastosowanie.

 3
Author: colin0117,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-17 16:38:06