Tinytext, TEXT, MEDIUMTEXT и LONGTEXT максимальные размеры хранения
на документы 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пожалуйста, обратитесь к ответу Криса 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,000In английский язык, 4,8 буквы на слово, вероятно, хороший средний (например norvig.com/mayzner.html), хотя длина слов будет варьироваться в зависимости от области (например, разговорный язык против академических работ), поэтому нет смысла быть слишком точным. Английский язык-это в основном однобайтовые символы ASCII, с очень случайные многобайтовые символы, так близко к одному байту на букву. Дополнительный символ должен быть разрешен для межсловных пространств, поэтому я округлил его с 5,8 байта на слово. Языки с большим количеством акцентов, таких как польский, будут хранить немного меньше слов, как, например, немецкий с более длинными словами.
языки, требующие мульти-байт символы, такие как греческий, арабский, иврит, хинди, тайский и т. д., обычно требуют два байта на символ в UTF-8. Предполагаю дико при 5 буквах на слово, я округлил вниз от 11 байт на слово.
скрипты CJK (Hanzi, Кандзи, Хирагана, катакана и т. д.) Я ничего не знаю; я считаю, что символы в основном требуют 3 байта в UTF-8, и (с массовым упрощением) они могут рассматриваться как использование около 2 символов на слово, поэтому они будут где-то между двумя другими. (Сценарии CJK, вероятно, потребуют меньше места для хранения с использованием UTF-16, в зависимости).
это, конечно, игнорируя накладные расходы на хранение так далее.
Это хорошо, но не отвечает на вопрос:
" VARCHAR всегда должен использоваться вместо TINYTEXT."Tinytext полезен, если у вас есть широкие строки - так как данные хранятся вне записи. Есть накладные расходы на производительность, но у него есть польза.
Comments