Максимальный размер хранилища TINYTEXT, TEXT, MEDIUMTEXT и LONGTEXT
Per документы MySQL, есть четыре типа текста:
- TINYTEXT
- текст
- MEDIUMTEXT
- LONGTEXT
какова максимальная длина, которую можно хранить в столбце тип данных, предполагая, что кодировка символов UTF-8?
4 ответов
С документация :
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
обратите внимание, что количество символы это может быть сохранено в вашем столбце будет зависеть от кодировка.
расширение того же ответа
- это так сообщение : varchar(255) vs tinytext/tinyblob и varchar (65535) vs blob/text подробно описывает накладные расходы и механизмы хранения.
- как отмечено из пункта (1), вместо TINYTEXT всегда следует использовать VARCHAR. Однако при использовании VARCHAR максимальный размер строки не должен превышать 65535 байт.
- как описано здесь http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-utf8.html, максимальные 3 байта для utf-8.
ЭТО ГРУБАЯ ТАБЛИЦА ОЦЕНКИ ДЛЯ БЫСТРЫХ РЕШЕНИЙ!
- таким образом, худшие предположения (3 байта на utf-8 char) в лучший случай (1 байт на utf-8 char)
- предполагая, что английский язык имеет в среднем 4,5 букв за слово
- x-количество байт выделено
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
см. ответ Крис Ви, а также : 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, с очень случайные многобайтовые символы, так близко к одному байту на букву. Дополнительный символ должен быть разрешен для межсловных пространств, поэтому я округлил от 5.8 байтов на слово. В языках с большим количеством акцентов, таких как польский, будет храниться немного меньше слов, как, например, немецкий с более длинными словами.
языки, требующие мульти-байт символы, такие как греческий, арабский, иврит, хинди, тайский и т. д. обычно требуют два байта на символ в UTF-8. Дико гадать при 5 буквах на слово я округлил от 11 байт на слово.
скрипты CJK (Ханзи, Кандзи, Хирагана, катакана и т. д.) Я ничего не знаю; я считаю, что символы в основном требуют 3 байта в UTF-8, и (с массовым упрощением) они могут рассматриваться как использование около 2 символов на слово, поэтому они будут где-то между двумя другими. (Скрипты CJK, вероятно, потребуют меньше памяти с использованием UTF-16, в зависимости).
это, конечно, игнорирование накладных расходов на хранение так далее.
Это хорошо, но не отвечает на вопрос:
" вместо TINYTEXT всегда следует использовать VARCHAR."Tinytext полезен, если у вас есть широкие строки - так как данные хранятся вне записи. Есть накладные расходы на производительность, но у него есть использование.