Должен ли я определить тип столбца из фактической длины или n-й степени 2 (Sql Server)? - PullRequest
0 голосов
/ 12 июня 2018

Должен ли я определить тип столбца от фактической длины до n-й степени 2?

В первом случае, у меня в столбце таблицы хранится не более 7 символов, будетЯ использую NVARCHAR (8)?поскольку внутри сервера Sql может быть неявное преобразование, выделять 8 пробелов и автоматически усекать (где-то слышали).

Если нет, то NCHAR (7) / NCHAR (8), что должно быть (предположим, что фиксированная длина равна 7)

Есть ли какие-либо отличия в этих двух случаях?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Вы должны использовать фактическую длину строки.Теперь, если вы знаете, что значение всегда будет точно 7 символов, тогда используйте CHAR(7) вместо VARCHAR(7).

Причина, по которой вы видите полномочия 2, относится к столбцамкоторые имеют неопределенную длину - имя или описание, которое не может быть исправлено.В большинстве баз данных вам нужно указать максимальную длину для varchar().По историческим причинам полномочия 2 используются для таких вещей из-за бинарной природы базовых процессоров.

Хотя я почти всегда использую полномочия 2 в этих ситуациях, я могу думать, что нетреальные различия в производительности.Есть один.,,в некоторых базах данных фактическая длина varchar(255) хранится с использованием 1 байта, тогда как varchar(256) использует 2 байта.Это довольно незначительная разница - даже при умножении на миллионы строк.

0 голосов
/ 12 июня 2018

Существует две причины, по которым вы должны хранить его в строке NVARCHAR (7):

  1. Целостность данных - если данные всегда будут ограничены максимум 7 символами, лучше сохранитьэто в том же размере.Это уменьшает вероятность появления плохих записей.
  2. Я думаю, вы путаете размер страницы (8 КБ) с размером хранилища столбцов.Этот ответ содержит подробный подробный ответ о хранении данных в SQL Server.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...