tgoop.com/big_data_systems_analysis/35
Last Update:
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
BY В мире больших данных
Share with your friend now:
tgoop.com/big_data_systems_analysis/35