2009-04-10 5 views
12

Я унаследовал проект веб-сайта asp.net, который в настоящее время запускает SQL Server 2000 в качестве его бэкэнд.varchar (max) MS SQL Server 2000, проблемы?

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

При просмотре вокруг на StackOverflow я наткнулся на это: Are there any disadvantages to always using nvarchar(MAX)?

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

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

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

ответ

11

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

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

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

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

Используйте колонку TEXT.

+0

Если вы используете текстовое поле, это затруднит поиск в этом поле. – TheTXI

+0

@TheTXI - в вопросе OP нет ничего, связанного с поиском в этом столбце. –

+0

Я бы не рекомендовал использовать тип данных TEXT, потому что [он будет удален в будущей версии Microsoft SQL Server] (http://msdn.microsoft.com/en-us/library/ms187993.aspx). –

15

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

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

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

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

+0

Нам пришлось переключиться на VARCHAR (8000). – mattruma

0

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

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

+0

nvarchar (4000) вы имеете в виду? Или варчар (8000)? – gbn

+0

хороший улов, я обновил ответ. –

Смежные вопросы