Вопрос 1: Как 8000 персонажей вступают в игру и где я должен знать об этом?
При установке n на 8000 в игру вступает 8000 символов. Вы должны знать о ссылках Precision, Scale и Length (Transact-SQL) о char, nchar, nvarchar и varchar. Напротив, если задать для параметра n значение max (без кавычек), SQL Server сохранит (и вернет) максимальное количество байтов (как указано в вашей цитате).
Вопрос 2: будет ли запрос к .net datareader к этому столбцу всегда возвращать полный результат со 100 000+ символами?
Это вопрос .Net (не SQL Server), но устройство чтения данных .Net извлекает поток байтов. Байт не является символом, и SQL Server возвращает байты (не символы). Если для n установлено значение 8000, а тип данных - nvarchar, SQL Server возвращает до 8000 байтов, что может интерпретировать устройство чтения данных .Net как 4000 символов Unicode. Если n установлено равным 8000, а тип данных - varchar, SQL Server возвращает до 8000 байт, что может интерпретировать устройство чтения данных .Net длиной до 8000 символов ANSI. Если для n задано значение max, а тип данных - nvarchar, SQL Server возвращает до 2 ^ 31-1 байт, что может интерпретировать устройство чтения данных .Net длиной до (2 ^ 31-1) / 2 символа. Если для n задано значение max, а тип данных - varchar, SQL Server возвращает до 2 ^ 31-1 байт, что может интерпретировать устройство чтения данных .Net до 2 ^ 31-1 символов ANSI.
Если вы решите использовать char или varchar (вместо nchar или nvarchar), потому что они могут хранить больше «символов» (точнее, байтов), вам нужно знать, что многие символы Unicode не имеют эквивалентных символов ANSI (таким образом, большая часть нашего пользователи всего мира не смогут увидеть свои локализованные / нативные символы в вашем приложении).
varchar(max)
когда-то вызывалсяtext
и обрабатывался как другой тип данных.