Какой тип данных SQL Server я должен использовать для текстового поля, которое будет «СОЕДИНЕНО» и «Запрошено» для многих? - PullRequest
4 голосов
/ 13 сентября 2010

Название действительно говорит само за себя, немного больше информации для тех, кто потрудился щелкнуть.

  • Строки будут иметь переменную длину, обычно от 2 до 5 символов, иногда могут превышать 5символов и более 10. Никогда не более 10.
  • Запрашивается примерно так:
    • SELECT ... WHERE ... = 'abcd';
    • SELECT ... WHERE ... LIKE 'ab%';
  • Будет использоваться в таблице JOINS.

Мне интересно, стоит ли мне использовать nvarchar (10) или char (10) или varchar (10)?Я действительно не знаю, каковы преимущества или недостатки вышеупомянутого для случая как мой.Я ценю любой ваш вклад.

Ответы [ 3 ]

7 голосов
/ 13 сентября 2010

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) (не зная всех ваших подробных требований, то есть).

0 голосов
/ 13 сентября 2010

varchar против nvarchar: Вы точно ограничены набором символов для печати на английском и американском языках?Или вам могут понадобиться иностранные символы?

'char' vs 'varchar': если 10 - сплошное, жесткое ограничение, тогда вам лучше использовать char.Основная проблема заключается в том, что поле всегда будет заполнено до 10 символов, поэтому вы всегда должны использовать Trim () для них.На некоторых серверах баз данных вы должны учитывать дополнительный интервал в предложениях where (т. Е. WHERE col1 = 'abcd '), но я думаю, что MS Sql Server делает разумную вещь.

0 голосов
/ 13 сентября 2010

nvarchar используется, если вы хотите хранить символы Юникода. символ (10) будет пустой тратой пространства для хранения.

Используйте nvarchar, если вы поддерживаете языки, отличные от английского, иначе varchar должен сделать свое дело. сравнения

Не забудьте указать индекс в этом поле, поскольку это ускорит ваши объединения и сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...