TGViewer
В мире больших данных В мире больших данных @big_data_systems_analysis · 301 subscribers
Post #35 82
CHAR и VARCHAR — что будем использовать? Или всё-таки TEXT?

У каждой СУБД есть особенности, связанные с используемыми типами данных, но что касается хранения текстовой информации чаще стандартом являются 'char', 'varchar' и 'text'. В чём же разница и как понять, что выбрать?

1. CHAR(n) — хранит текстовые данные фиксированной длины. Что это значит? Под данные всегда бронируется указанное число символов и если добавить в столбец name типа char(5) текст 'Olga', то физически запишется 'Olga '. Недостающие символы дополнятся пробелами. Нужно понимать, что несмотря на то, что вы внесли в такой столбец текст длиной 4 символа, вывод LENGTH(name) по этому значению выведет длину строки 5.

Поэтому хранить данные переменной длины в типе char крайне неэффективно. Столбец типа CHAR всегда будет занимать одинаковое, прогнозируемое пространство диска.

Кроме этого возможны проблемы:
— при конкатенации строк, т.к. данные дополняются пробелами.
— с поиском пробелов в строках.

Если всё-таки используете тип char, в запросах рекомендуется использовать функцию RTRIM, которая усекает пробелы в конце строки.

2. VARCHAR(n) — для хранения строк переменной длины. n — указывает на максимальное хранимое количество символов, но не ограничивает в хранении строк меньшей длины.

Производительность типа varchar незначительно ниже, чем у char, так как для вычислений необходимо использовать информацию о длине строки. А, например, тот же Oracle в своём типе VARCHAR2 хранит не только строку, но и информацию о её длине. Нужно помнить, что зато данные в столбцах типа varchar, если они переменной длины, занимают меньше дискового пространства.

3. TEXT — хранит данные любой длины без ограничений. Это не значит, что нужно складывать в этот тип весь текст всех страниц Wikipedia, для очень больших текстовых данных существуют специально оптимизированные типы.

Отдельно стоит отметить особенности использования varchar без указания максимальной длины и text. Они будут отличаться для различных СУБД и стоит изучить их отдельно.

Дополнительно можно почитать хорошую статью по строковым типам на sql-ex.

#sql
More from @big_data_systems_analysis
  1. Jul 28, 2026Продолжая тему тех самых SQL-скриптов на 1200 строк, хочу напомнить одну важную вещь, кото…
  2. Jul 15, 2026Борьба с ветряными мельницами Думаю, многим из вас уже набили оскомину разговоры об ИИ. Мн…
  3. Mar 8, 2026В этот день желаю женской части аудитории верить в себя и позволять быть себе любой без ог…
  4. Mar 6, 2026Этот мем — точная копия одного рабочего дня, который я, кажется, прожила уже раз двести 😄…
  5. Mar 4, 2026Знаете, какая фраза чаще всего дорого обходится компании? "Работает — и ладно" 🥂 Результа…
  6. Feb 26, 2026Дисциплина, конечно, прошла мимо меня 😄 в черновиках 1000 и 1 пост, но ни один из них не…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →