Назад | Перейти на главную страницу

Использовать SQL varchar (max) или текст?

Я использую SQL Server 2005, и у меня есть столбец, в котором мне нужно хранить большие объемы текста (иногда более 8000 символов, ограничение varchar). Есть ли недостатки в использовании типа данных «текст»? Я также читал об использовании varchar (MAX) - было бы лучше, если бы большая часть моих данных, хранящихся в нем, содержала менее 8000 символов, но мне нужно было поддерживать больше?

В 2005 году вы всегда должны использовать новые типы LOB вместо устаревших типов (текст, ntext, изображение), если у вас есть потенциал для данных размером более 8000 байт.

Новые типы работают с большинством встроенных функций обработки строк, тогда как унаследованные типы - нет. Они хранятся в базе данных точно так же, но есть несколько небольших настроек для чтения алгоритмов для новых типов.

Однако следует помнить о некоторых вещах:

  • Унаследованные типы по умолчанию хранятся вне строк, что означает, что для доступа к данным существует случайный ввод-вывод независимо от размера данных. Конечно, вы можете изменить это с помощью опции «текст в строке».
  • новые типы хранятся НА row по умолчанию, не более 8000 байт и до тех пор, пока в записи есть место. Это снижает вероятность использования этого случайного ввода-вывода для получения значения, НО делает ваши записи данных намного длиннее, что приводит к другим проблемам. Вы можете изменить, будут ли данные храниться в строке или вне строки, изменив параметр больших значений-типов-вне строки
  • Каждый раз, когда у вас есть новый или унаследованный тип LOB в определении таблицы, это означает, что кластерный индекс таблицы не может использовать операции онлайн-индекса в выпуске Enterprise.

Я опубликовал сообщение в блоге, в котором это обсуждается более подробно на http://www.sqlskills.com/BLOGS/PAUL/post/Importance-of-choosing-the-right-LOB-storage-technique.aspx.

Надеюсь это поможет

Используйте varchar (max), это рекомендуемый подход в будущем, поэтому он избавит вас от проблем с обновлением, также с ним намного проще работать с текстовым типом данных.

Используйте varchar (MAX). Предел для varchar (MAX) составляет 2 ГБ.

Если содержимое меньше 8000 байт, оно будет храниться во встроенном. Однако, если содержимое превышает 8000 байт, оно сохраняется в LOB, как текстовое поле.

Кроме того, в какой-то момент в будущем будут исключены типы данных TEXT, NTEXT и IMAGE.

Ссылка

Несколько хороших постов от MVP Саймона Сабина об этом в его блоге. Искать Simon Sabin varchar (max)

Я согласен с Полом, по возможности используйте varchar (max).

varchar (макс.)

  • Ограничение 2 ГБ, или 2 ^ 31 символов
  • если <8000 байт, он будет сохранен встроенным
  • если> 8000 хранится с использованием LOB

Текст

  • 2 147 483 647 символов
  • Это устарело в пользу varchar (max)
  • Таблица хранит текстовое значение в структуре LOB, а таблица будет содержать только указатель