Varchar (max) MS SQL Server 2000, проблемы?
Я унаследовал проект веб-сайта asp.net, который в настоящее время запускает SQL Server 2000 в качестве его бэкэнд.
Я делал некоторые изменения баз данных на локальной копии db, используя SQL Server 2005 Express. Я создал таблицу, используя столбцы varchar(max)
. Они используются для хранения фрагментов XHTML произвольной длины.
Во время просмотра в stackoverflow я столкнулся с этим:
Есть ли недостатки в использовании nvarchar (MAX)?
Пользователь mattruma говорит, что он обнаружил "трудный способ" использования varchar(max)
на SQL Server 2000.
Что мне следует использовать вместо varchar(max)
, учитывая, что в SQL Server 2000 работает live-база данных?
Заранее благодарим за помощь!
Ответы
Ответ 1
Похоже, что ограничения varchar(MAX)
являются спорным вопросом, если ваша живая БД - это SQL Server 2000, которая их не поддерживает. Если у вас есть более 8K символов для хранения, вы в значительной степени остаетесь с единственным другим вариантом, столбец TEXT
. Однако будьте осторожны, что столбцы TEXT
также имеют множество ограничений.
Например, вы не можете легко сортировать или группировать их, а также не сравнивать их с другими столбцами. То есть вы не можете сказать Select * from mytable where Mytext1 = mytext2
.
Другие актуальные проблемы:
- Я бы предложил использовать столбец
NText
или NVarchar
независимо от того, как вы собираетесь поддерживать Unicode.
- Если в таблице много других столбцов, а столбец
varchar(8000)
, скорее всего, будет близок к полной, могут возникнуть проблемы с лимитом строки 8K. Помните об этом также.
Ответ 2
VARCHAR(Max)
был введен в SQL Server 2005 и не будет работать на SQL Server 2000. Вам нужно использовать либо VARCHAR(8000)
, предполагая, что он будет достаточно большим. В противном случае вам нужно будет использовать TEXT
Edit
Также, если вы переходите на VARCHAR(8000)
, помните, что существует ограничение на то, что одна строка не может иметь более 8060 байт. Поэтому, если вы заполните таблицу VARCHAR(8000)
и получите кучу других больших столбцов, вы получите сообщение об ошибке. Здесь TEXT
входит.
TEXT
имеет последствия для производительности, поскольку по умолчанию он хранится в отдельном месте и сохраняет указатель в таблице. Существует опция set, которая изменяет это поведение, чтобы типы текста сохранялись в таблице до тех пор, пока они не достигнут определенного размера. Если у вас в основном маленькие капли, вы можете включить это.
Ответ 3
Используйте столбец TEXT.
Ответ 4
Это зависит от ваших потребностей. Вы можете использовать столбец TEXT вместо VARCHAR (MAX), но вы должны быть уверены, что в вашей реализации не нужно искать в этом поле, так как вы не можете делать сравнения в полях TEXT и NTEXT.
Если вы можете ограничить себя 8000 символами, я бы использовал столбец VARCHAR (8000) для хранения информации.