Tinytext, TEXT, MEDIUMTEXT i LONGTEXT maksymalne rozmiary pamięci masowej
Na dokumenty MySQL istnieją cztery typy tekstu:
- TINYTEXT
- tekst
- MEDIUMTEXT
- 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?
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 .
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
- This SO post : Varchar (255) vs tinytext / tinyblob and VARCHAR(65535) vs blob / text szczegółowo przedstawia koszty ogólne i mechanizmy przechowywania.
- 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.
- 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!
- więc założenia o najgorszym przypadku (3 bajty na znak utf-8) do najlepszego przypadku (1 bajt na znak utf-8)
- zakładając, że język angielski ma średnio 4,5 litery na słowo
- 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
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.
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.
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