Разница между VARCHAR и текстом в mysql [закрыто]



когда мы создаем таблицу в MySQL с , мы должны установить длину для него. Но для TEXT тип мы не должны предоставлять длины.



В чем разница между VARCHAR и TEXT?

422   1  

1 ответ:

TL; DR

TEXT

  • фиксированный максимальный размер 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 есть переменная максимальный размер MдоM = 2¹⁶-1.
Так что вы не можете выбрать размер TEXT но вы можете для VARCHAR.

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

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

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

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

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

для получения дополнительной информации посмотрите на документация.

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

Comments

    Ничего не найдено.