Per документы docs, существует четыре типа TEXT:
- TINYTEXT
- ТЕКСТ
- MEDIUMTEXT
- LONGTEXT
Какова максимальная длина, которую я могу сохранить в столбце каждого типа данных, если кодировка символов UTF-8?
Per документы docs, существует четыре типа TEXT:
Какова максимальная длина, которую я могу сохранить в столбце каждого типа данных, если кодировка символов UTF-8?
Из документации:
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
Обратите внимание, что количество символов, которое может быть сохранено в вашем столбце, будет зависеть от кодировки символов.
Расширение того же ответа
ЭТО ЖЕСТКАЯ ОЦЕНКА ТАБЛИЦА ДЛЯ БЫСТРОГО РЕШЕНИЯ!
х-х
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: fooobar.com/questions/13896/...
Поднимаясь к задаче @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-скрипты (Hanzi, Kanji, Hiragana, Katakana и т.д.) Я ничего не знаю; Я считаю, что в большинстве случаев для UTF-8 характерны 3 байта, и (с массивным упрощением) они могут считаться использующими около 2 символов на слово, поэтому они будут находиться где-то между двумя другими. (Сценарии CJK, вероятно, потребуют меньше хранилища с использованием UTF-16, в зависимости).
Это, конечно, игнорирует накладные расходы на хранение и т.д.
Это хорошо, но не отвечает на вопрос:
"VARCHAR всегда должен использоваться вместо TINYTEXT". Tinytext полезен, если у вас широкие строки - поскольку данные хранятся вне записи. Производительность снижается, но она имеет смысл.