CHAR(10)
будет дополнен до определенной длины пробелами, например, если у вас есть CHAR(10)
и в нем хранится «Stack», содержимое действительно будет «Stack .....». Прекрасно работает для таких вещей, как сокращение штата (всегда 2 знака). Но заполнение делает запрос немного более громоздким.
VARCHAR(10)
будет хранить столько символов, сколько необходимо - более эффективно, но больше для больших строк.
NVARCHAR(10)
будет такой же - переменной длины - но с 2 байтами для каждого символа (а NCHAR(10)
совпадает с CHAR(10)
- только 2 байта на символ). Отлично подходит для тех случаев, когда вам необходимо регулярно поддерживать, например, Азиатские, кириллические или арабские символы или другие «нелатинские» алфавиты. Если у вас есть только западноевропейские языки (английский, французский, немецкий, испанский и т. Д.), Это пустая трата времени.
Мои интуитивные ощущения говорят мне, что CHAR/NCHAR
может быть немного быстрее при присоединении, но я не думаю, что это действительно будет существенной разницей. В противном случае, если вам нужно зарезервировать 10 символов для каждой записи, и большинство из них составляют всего от 2 до 5 символов, вы теряете некоторое пространство, что является недостатком для типов CHAR/NCHAR
.
Так что, если бы мне пришлось принять решение, я бы, вероятно, использовал VARCHAR(10)
(не зная всех ваших подробных требований, то есть).