Каковы преимущества и недостатки использования типов данных nvarchar(max)
против и NText
в SQL Server? Мне не нужна обратная совместимость, поэтому хорошо, что nvarchar(max)
она не поддерживается в старых версиях SQL Server.
Изменить: Очевидно, вопрос также относится к TEXT
и IMAGE
против varchar(max)
и varbinary(max)
, для тех, кто ищет эти типы данных позже.
sql-server
sql-server-2005
sql-server-2008
text
nvarchar
Дэвид Пфеффер
источник
источник
VARCHAR(MAX)
достаточно большой, чтобы вместитьTEXT
поле.TEXT
,NTEXT
ИIMAGE
типы данных SQL Server 2000 будет устаревшим в версии будущего в SQL Server, SQL Server 2005 обеспечивает обратную совместимость с типами данных , но рекомендуется использовать новые типы данных , которыеVARCHAR(MAX)
,NVARCHAR(MAX)
иVARBINARY(MAX)
.источник
ntext
всегда будет хранить свои данные на отдельной странице базы данных, при этомnvarchar(max)
будет пытаться сохранить данные в самой записи базы данных.Так что
nvarchar(max)
это немного быстрее (если у вас есть текст, который меньше, чем 8 КБ). Я также заметил, что размер базы данных будет расти немного медленнее, это тоже хорошо.Go
nvarchar(max)
.источник
nvarchar(max)
это то, что вы хотите использовать. Самое большое преимущество заключается в том, что вы можете использовать все строковые функции T-SQL для этого типа данных. Это невозможно сntext
. Я не знаю никаких реальных недостатков.источник
nvarchar(max)
но это ограничивает меня до 4000 символов. Что если я хочу, чтобы поле содержало больше?nvarchar(max)
до 4000 символов. Поэтому для SQL Server Compact у меня нет выбора, кроме как использоватьntext
в некоторых случаях. Когда они его прекратят, я полагаю, мне просто не придется обновлять некоторые сайты.Вы, очевидно, должны использовать
nvarchar(max)
:MSDN
источник
Самый большой недостаток
Text
(вместе сNText
иImage
) заключается в том, что он будет удален в будущей версии SQL Server, как указано в документации . Это эффективно усложнит обновление вашей схемы после выпуска этой версии SQL Server.источник
Хотел добавить свой опыт с конвертированием. У меня было много
text
полей в древнем коде Linq2SQL. Это должно было позволить перестроитьtext
столбцы в индексах ONLINE .Сначала я знал о преимуществах в течение многих лет, но всегда предполагал, что преобразование будет означать несколько страшных длинных запросов, когда SQL Server придется перестраивать таблицу и копировать все, разрушая мои веб-сайты и повышая мою сердечность.
Я также был обеспокоен тем, что Linq2SQL может вызвать ошибки, если он выполняет какую-то проверку типа столбца.
Рад сообщить, что команды ALTER вернулись мгновенно - поэтому они определенно только меняют метаданные таблицы. Может случиться, что в автономном режиме будет выполнено возвращение данных <8000 символов в таблицу, но команда ALTER была мгновенной.
Я запустил следующее, чтобы найти все столбцы, нуждающиеся в преобразовании:
Это дало мне хороший список запросов, которые я только что выбрал и скопировал в новое окно. Как я уже сказал - бегать это было мгновенно.
Linq2SQL довольно древний - он использует конструктор, на который вы перетаскиваете таблицы. Ситуация может быть более сложной для EF Code в первую очередь, но я еще не решил эту проблему.
источник
Я хочу добавить, что вы можете использовать предложение .WRITE для частичных или полных обновлений, а высокая производительность добавляет к
varchar(max)/nvarchar(max)
типам данных.Здесь вы можете найти полный пример использования
.WRITE
предложения.источник