Почему размер nvarchar по умолчанию равен 255 (MSSQL Server)?

Почему размер по умолчанию nvarchar - Это 255 (MSSQL Server)? Почему не 256?

и я должен использовать nvarchar(63) вместо nvarchar(64) и так далее ... 127 вместо 128?

Я попытался Google этот вопрос, и я не нашел исчерпывающего ответа.


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

о размере по умолчанию: это только мое предположение. Hibernate и EclipseLink (Java persistence Framework) преобразуют строку в nvarchar (255), поэтому я подумал, что это так норматив.

1 ответов


на документация вполне понятно:

когда n не указано в определении данных или объявлении переменной заявление, длина по умолчанию равна 1. Когда n не указано при использовании функции CAST и CONVERT по умолчанию имеют длину 30.

всегда используйте спецификацию длины для этих переменных.

что касается вашего второго вопроса. Типы varchar и nvarchar кодировать длину значения для каждого значения. Я не уверен, что SQL Server использует 1 байт для длин до 255, а затем 2 байта для длин до 4000/8000. The max использует 4 байта. (И все они теперь могут перейти на дополнительные страницы.) В общем случае для строк переменных символов вы должны использовать значение, которое достаточно велико для того, что вы хотите включить, поэтому вам не нужно изменять длину с помощью alter table. Используется только необходимое хранилище для определенного значения, поэтому немного более длинное объявление не влияет спектакль.

обратите внимание, что для char и nchar, вы хотите кратчайшую возможную длину, потому что столбец фактически займет это пространство для хранения.