«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > VARCHAR и TEXT в MySQL: каковы ключевые различия?

VARCHAR и TEXT в MySQL: каковы ключевые различия?

Опубликовано 24 января 2025 г.
Просматривать:611

VARCHAR vs. TEXT in MySQL: What are the key differences?

Разница между VARCHAR и TEXT в MySQL

При создании таблицы в MySQL длина столбца типа VARCHAR должна быть четко задана. Однако для типа TEXT длину указывать не обязательно. Так в чем же разница между VARCHAR и TEXT?

TL;DR

ТЕКСТ

  • Фиксированная максимальная длина 65535 символов (максимальная длина не может быть ограничена)
  • занят диск пространство 2 c байта, где c Чтобы сохранить длину строки
  • невозможно (полностью) проиндексировать, необходимо указать длину префикса

VARCHAR(M)

  • Максимальная длина переменной: M символов.
  • M должно быть от 1 до 65535.
  • Занимает дисковое пространство 1 c байтов (M ≤ 255) или 2 c байта (256 ≤ M ≤ 65535), где c — длина хранимой строки.
  • Индексируемая

Подробное описание

TEXT имеет фиксированную максимальную длину 2¹⁶-1 = 65535 символов, а VARCHAR Максимальная длина варьируется до 2¹⁶-1. Таким образом, размер TEXT нельзя выбрать, а размер VARCHAR можно выбрать.

Другое отличие состоит в том, что индексы (кроме полнотекстовых индексов) не разрешены для столбцов TEXT. Поэтому для индексации этого столбца необходимо использовать VARCHAR. Но обратите внимание, что длина индекса также ограничена. Если столбец VARCHAR слишком длинный, индекс может использовать только первые несколько символов столбца VARCHAR (см. документацию CREATE INDEX).

VARCHAR также следует использовать, если вы знаете, что максимальная длина возможной входной строки составляет только M, например номер телефона или имя. Затем вы можете использовать VARCHAR(30) вместо TINYTEXT или TEXT, так что даже если кто-то попытается сохранить полный текст «Властелина колец» в столбце, который вы используете для хранения телефонных номеров, вам нужно будет сохранить только первые 30 символов: )

Изменить:Если текст, который будет сохранен в базе данных, длиннее 65535 символов, необходимо выбрать MEDIUMTEXT или LONGTEXT, но будьте осторожны: максимальная длина сохраняемой строки составляет 16 МБ для MEDIUMTEXT и 4 ГБ для LONGTEXT. Если вы используете LONGTEXT и получаете данные через PHP (по крайней мере, если вы используете mysqli и не используете функцию store_result), вы можете получить ошибку распределения памяти, поскольку PHP попытается выделить 4 ГБ памяти, чтобы гарантировать, что вся строка может быть быть буферизованным. Это может произойти и на других языках, помимо PHP.

Однако вам следуетвсегдапроверять введенные данные перед сохранением данных в базе данных (не слишком ли они длинные? не содержат ли они странный код?).

Обратите внимание: для обоих типов требуемое дисковое пространство зависит только от длины хранимой строки, а не от максимальной длины. Например, если вы используете набор символов latin1 и сохраняете текст «Test» в VARCHAR(30), VARCHAR(100) и TINYTEXT, для него всегда потребуется 5 байтов (1 байт для хранения длины строки, каждый символ 1 байт). . Если вы сохраните тот же текст в столбце VARCHAR(2000) или TEXT, для него также потребуется такое же пространство, но в этом случае он займет 6 байт (2 байта для хранения длины строки, 1 слово на символ Festival).

Дополнительную информацию см. в документации.

Наконец, я хотел бы добавить, что и TEXT, и VARCHAR являются типами данных переменной длины, поэтому они, скорее всего, минимизируют количество пустых мест, необходимых для хранения данных.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3