varchar (max) MS SQL Server 2000, проблемы? - PullRequest
13 голосов
/ 10 апреля 2009

Я унаследовал проект веб-сайта asp.net, в котором в настоящее время используется SQL Server 2000 в качестве его внутреннего сервера.

Я делал некоторые изменения в базах данных в локальной копии БД с использованием SQL Server 2005 Express. Я создал таблицу, используя varchar(max) столбцы. Они используются для хранения фрагментов XHTML произвольной длины.

При просмотре на stackoverflow я наткнулся на это: Есть ли недостатки при использовании nvarchar (MAX)?

Пользователь mattruma говорит, что он нашел «сложный способ» использования varchar(max) в SQL Server 2000.

Что я должен использовать вместо varchar(max), учитывая, что работающая база данных работает на SQL Server 2000?

Заранее спасибо за любую помощь!

Ответы [ 4 ]

16 голосов
/ 10 апреля 2009

VARCHAR(Max) был введен в SQL Server 2005 и не будет работать в SQL Server 2000. Вам необходимо использовать либо VARCHAR(8000), предполагая, что он будет достаточно большим. В противном случае вам нужно будет использовать TEXT

Редактировать

Также, если вы переключитесь на VARCHAR(8000), имейте в виду, что есть предел, что одна строка не может иметь более 8060 байтов. Поэтому, если вы заполните таблицу varchar(8000) и у вас будет куча других больших столбцов, вы получите ошибку. Это где Text входит.

Text влияет на производительность, поскольку по умолчанию он хранится в отдельном месте, а указатель хранится в таблице. Существует параметр set, который изменяет это поведение, так что текстовые типы сохраняются в таблице до достижения определенного размера. Если у вас есть в основном маленькие капли, вы можете включить это.

11 голосов
/ 10 апреля 2009

Похоже, что ограничения varchar(MAX) являются спорным вопросом, если ваша живая БД - SQL Server 2000, которая их не поддерживает. Если у вас есть более 8K символов для хранения, у вас остается только одна другая опция, столбец TEXT. Однако следует помнить, что столбцы TEXT также имеют множество ограничений.

Например, вы не можете легко сортировать или группировать их, а также не можете сравнивать их по эквивалентности с другими столбцами. То есть вы не можете сказать Select * from mytable where Mytext1 = mytext2.

Другие соответствующие проблемы:

  • Я бы предложил использовать столбец NText или NVarchar независимо от того, как вы поддерживаете Юникод.
  • Если в таблице много других столбцов и столбец varchar(8000), вероятно, часто близок к полному, у вас могут быть проблемы с пределом строки 8K. Помните об этом тоже.
1 голос
/ 10 апреля 2009

Используйте столбец TEXT.

0 голосов
/ 10 апреля 2009

Это зависит от ваших потребностей. Вы можете использовать столбец TEXT вместо VARCHAR (MAX), но вы должны быть уверены, что ваша реализация не нуждается в поиске по этому полю, поскольку вы не можете делать подобные сравнения в полях TEXT и NTEXT.

Если вы можете ограничить себя до 8000 символов, я бы использовал столбец VARCHAR (8000) для хранения информации.

...