Сравнение Borland InterBase 4.x, Sybase SQL Server и Microsoft SQL Server

ОГЛАВЛЕНИЕ

4. CHAR и VARCHAR

4.1. Хранение

4.1.1. SQL Server

4.1.1.1. CHAR или VARCHAR

Практически во всех SQL-серверах реализовано два главных типа данных для хранения символьной информации. Первый - фиксированной длины, и известный как CHAR. В большинстве РСУБД CHAR занимает пространство фиксированной длины независимо от длины действительно хранимых данных. Свободное пространство поля типа CHAR "дополняется" до объявленной длины пробелами. Тип CHAR полезен если длина хранимых данных практически не меняется, например как для кодов стран и штатов США. CHAR может быть использован и для хранения имен или адресов, но это приведет к большим потерям дискового пространства.

VARCHAR хранит символьные данные с переменной длиной. Это значит что на диске распределяется пространства столько-же, сколько нужно для хранения символьных данных. Максимальная длина поля типа VARCHAR указывается при создании таблицы. Когда значение типа VARCHAR записывается на диск, РСУБД определяет его фактическую длину, и отводит под его хранение столько-же байт на диске. VARCHAR обеспечивает эффективное использование дискового пространства при хранении символьных данных, когда длина значения символьного поля варьируется в больших пределах.

4.1.1.2. Ограничения Длины

Длина типа VARCHAR в SQL Server ограничена 255 байтами. Если требуется хранение строк длиной более 255 символов, то необходимо использовать тип поля TEXT. Данные в поле типа TEXT хранятся как данные BLOb с размером сегмента 2K (минимальный размер страницы). Другими словами, даже если данные в поле TEXT занимают один байт или 1500 байт, SQL Server распределяет блок размером 2K для хранения значения поля. SQL Server жертвует дисковым пространством с целью обеспечения производительности при работе с полями  BLOb. Разработчик должен тщательно планировать структуру базы данных для баланса между занимаемым дисковым пространством и производительностью, и иногда идти на компромисс, используя комбинацию из двух или более VARCHAR для хранения строковых данных, которые превышают 255 символов но гарантированно меньше 2К. Соответственно и приложение должно извлекать данные из таких полей и группировать их в одно поле для нормального представления данных..