На SO и других сайтах имеется несколько сообщений, в которых четко указано, что максимальная длина nvarchar(max)
составляет 2 ГБ. Тем не менее, я вижу также много путаницы в Интернете и в реальной жизни, что на самом деле это 8000/4000 в Юникоде.
Я хотел бы знать, что может изменить этот факт, или, возможно, привести кого-то к ложному предположению.
Некоторые предложения / частичные ответы, которые я уже собрал:
- Существуют ли более старые версии SQL Server, которые поддерживают максимум 4000?
При назначении nvarchar(max)
переменной / столбца для объединения компонентов не максимального размера, мы должны явно преобразовать все в nvarchar(max)
? Вот что-то, демонстрирующее странный пример, когда функция, возвращающая текст, требует преобразования, тогда как N для литерала можно опустить:
declare @s nvarchar(max)
select @s = convert(nvarchar(max), replicate('.', 8000)) + N'Hi!'
select len(@s) -- returns 8003
declare @s nvarchar(max)
select @s = replicate('.', 8000) + N'Hi!'
select len(@s) -- returns 4000
declare @s nvarchar(max)
select @s = convert(nvarchar(max), replicate('.', 8000)) + 'Hi!'
select len(@s) -- returns 8003
Есть ли способы отключить функциональность? sp_tableoption @OptionName=large value types out of row
или OBJECTPROPERTY(id,'TableTextInRowLimit')
имеет какое-либо отношение к этому?
Разъяснение : Моя цель не в том, чтобы использовать эту функцию, а знать о ее существовании, которое, возможно, действительно использовалось пользователем с более высокими привилегиями, что помешает me используя максимальный размер.
Любые другие пункты с радостью приветствуем