Использование типов данных text и image

Важное примечаниеВажно!

В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется. Используйте вместо этого типы данных varchar(max), nvarchar(max) и varbinary(max). Дополнительные сведения см. в разделе Использование типов данных больших значений.

Microsoft SQL Server хранит текстовые строки длиннее 8 000 символов и двоичные данные больше 8 000 байт в специальных типах данных, называющихся text и image. Строки в Юникоде длиннее 4 000 символов хранятся в типе данных ntext.

Например большой текстовый файл (TXT) с данными о заказчике должен быть импортирован в базу данных SQL Server. Эти данные должны храниться единым фрагментом данных, а не разбиваться на несколько столбцов в таблицах с данными. Для этой цели можно создать столбец с типом данных text. Однако если нужно хранить эмблемы компании, в данный момент хранящиеся в виде изображений в формате TIFF размером 10 KБ каждое, создайте столбец, имеющий тип данных image.

Если текстовые данные должны храниться в формате Юникод, воспользуйтесь типом данных ntext. Например стандартное письмо, подготовленное для международных заказчиков, может содержать международную орфографию и символы, используемые в разных языках. Храните эти данных в столбце ntext.

У каждого значения типов данных text и ntext есть параметры сортировки. Параметры сортировки определяют такие атрибуты, как правила сравнения и чувствительность к регистру или ударению. Режимы сопоставления для значений text также указывают кодовую страницу, определяющую битовые шаблоны для представления каждого символа. Каждое значение ntext использует кодовую страницу в Юникоде, одну и ту же для всех параметров сортировки. Для каждой базы данных заданы параметры сортировки по умолчанию. При создании столбца text или ntext задаются параметры сортировки по умолчанию базы данных, если только не будут указаны конкретные параметры сортировки предложением COLLATE. При комбинировании или сравнении двух значений text или ntext с разными параметрами сортировки очередность параметров сортировки определяет, какие параметры сортировки используется в операции.

Сведения в данных image хранятся в виде строки битов и не обрабатываются SQL Server. Любая обработка данных в столбце image должна проводиться приложением. Например приложение могло бы хранить данные в столбце image в форматах BMP, TIFF, GIF или JPEG. Приложение, считывающее данные из столбца image, должно распознавать и правильно отображать формат данных. Все, что делает столбец image, — это предоставление места для хранения потока битов, составляющих значение данных image.

Использование текста в строке таблицы для хранения значений text, ntext и image

Обычно строки text, ntext или image имеет большой размер, до 2 ГБ. Символьные или двоичные строки хранятся вне строки таблицы с данными. Строка с данными содержит только 16-байтовый текстовый указатель, указывающий на корневой узел дерева, построенного из внутренних указателей, помечающих страницы, на которых хранятся фрагменты строки.

C помощью SQL Server можно хранить значения text, ntext и image от малого до среднего в строке с данными, увеличивая, таким образом, скорость выполнения запросов, обращающихся к этим значениям.

Когда строка text, ntext или image хранится в строке с данными, SQL Server не имеет доступа к отдельной странице или набору страниц для считывания или записи строки. Это позволяет считывать и записывать строки, имеющие тип text, ntext или image, в строках таблицы почти так же быстро, как и строки, имеющие тип varchar, nvarchar или varbinary.

Для хранения строк типа text, ntext или image в строке с данными включите параметр text in row с помощью хранимой процедуры sp_tableoption.

sp_tableoption N'MyTable', 'text in row', 'ON';

При желании можно указать максимальный размер строки text, ntext или image, хранящейся в строке с данными (от 24 до 7 000 байт):

sp_tableoption N'MyTable', 'text in row', '1000';

Если вместо конкретного предела будет указано значение ON, пределом по умолчанию будет 256 байт. Значение по умолчанию обеспечивает большинство необходимых для производительности преимуществ: оно достаточно большое, чтобы маленькие строки и корневые текстовые указатели хранились в строках, но не настолько большое, чтобы уменьшить число строк на страницу и этим ограничить производительность.

Хотя в общем случае не следует устанавливать значение меньше 72, также не следует устанавливать значение слишком высоким, особенно в таблицах, где большинство инструкций не ссылаются на столбцы text, ntext, и image или где есть несколько столбцов text, ntext и image.

Чтобы отключить этот параметр, можно также воспользоваться процедурой sp_tableoption, указав значение параметра либо OFF, либо 0:

sp_tableoption N'MyTable', 'text in row', 'OFF';