Согласно документации по MySQL , существует четыре типа TEXT:
- TINYTEXT
- ТЕКСТ
- MEDIUMTEXT
- LONGTEXT
Какова максимальная длина, которую я могу хранить в столбце каждого типа данных, предполагая, что кодировка символов - UTF-8?
Согласно документации по MySQL , существует четыре типа TEXT:
Какова максимальная длина, которую я могу хранить в столбце каждого типа данных, предполагая, что кодировка символов - UTF-8?
Ответы:
Из документации :
Тип | Максимальная длина ----------- + ------------------------------------- TINYTEXT | 255 (2 8 -1) байтов ТЕКСТ | 65 535 (2 16 -1) байт = 64 КиБ MEDIUMTEXT | 16 777 215 (2 24 -1) байт = 16 МБ LONGTEXT | 4 294 967 295 (2 32 -1) байт = 4 ГиБ
Обратите внимание, что количество символов, которое можно сохранить в столбце, будет зависеть от кодировки символов .
A TEXT column with a maximum length of 255 (28 – 1) characters. The effective maximum length is less if the value contains multi-byte characters.
см. Ответ Анкана для более подробной информации.
Расширение того же ответа
ЭТО ЖЕСТКИЙ СТОЛ ОЦЕНКИ ДЛЯ БЫСТРОГО РЕШЕНИЯ!
хх
Type | A= worst case (x/3) | B = best case (x) | words estimate (A/4.5) - (B/4.5)
-----------+---------------------------------------------------------------------------
TINYTEXT | 85 | 255 | 18 - 56
TEXT | 21,845 | 65,535 | 4,854.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
TINYTEXT
считает 1 байт + 8 байт от размера записи, тогда как a VARCHAR(255)
считает от 1 байта + 255 байт до 2 байт + 1020 байт (4 байта символов UTF-8) против размера записи.
Подходя к задаче @ 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 (ханзи, кандзи, хирагана, катакана и т. Д.), О которых я ничего не знаю; Я полагаю, что символам в UTF-8 в основном требуется 3 байта, и (с огромным упрощением) они могут использовать около 2 символов в слове, поэтому они будут где-то между двумя другими. (Сценарии CJK, вероятно, потребуют меньше памяти при использовании UTF-16, в зависимости от).
Это, конечно, игнорирование накладных расходов на хранение и т. Д.