Varchar или nvarchar
Я сохраняю имя и фамилию длиной до 30 символов. Что лучше varchar
или nvarchar
.
Я читал, что nvarchar
занимает в два раза больше места по сравнению с varchar
и что nvarchar
используется для интернационализации.
Итак, что вы предлагаете, я должен использовать: nvarchar
или varchar
?
Также, пожалуйста, дайте мне знать о производительности обоих. Является ли производительность для обоих одинаковыми или они отличаются по производительности. Потому что пространство не слишком большая проблема. Проблема - это производительность.
Ответы
Ответ 1
В принципе, nvarchar означает, что вы можете обрабатывать множество алфавитов, а не просто обычный английский. Технически это означает поддержку Unicode, а не только ANSI. Это означает знаки двойной ширины или примерно в два раза больше места. В эти дни дисковое пространство настолько дешево, что вы можете использовать nvarchar с самого начала, а не испытывать боль от необходимости менять его в течение жизни продукта.
Если вы уверены, что вам понадобится только один язык, который вы можете использовать с varchar, в противном случае я бы пошел с nvarchar.
Это обсуждалось на SO перед здесь.
EDITED: изменено ascii на ANSI, как указано в комментарии.
Ответ 2
Прежде всего, чтобы уточнить, nvarchar
хранит данные Unicode, а varchar
хранит данные ANSI (8 бит). Они работают одинаково, но nvarchar занимает в два раза больше места.
Как правило, я предпочитаю хранить имена пользователей, используя varchar
datatypes, если эти имена не имеют символов, которые выпадают из границы символов, которые varchar
может хранить.
Это также зависит от сортировки базы данных. Напр. вы не сможете хранить русские символы в поле varchar
, если сортировка базы данных LATIN_CS_AS
. Но если вы работаете над локальным приложением, которое будет использоваться только в России, вы настроили сопоставление базы данных на русский язык. Что это будет сделано, так это то, что он позволит вам вводить русские символы в поле varchar
, сохраняя некоторое пространство.
Но в настоящее время большинство разрабатываемых приложений являются международными, поэтому вы сами должны решить, что все пользователи будут подписывать, и на основе этого определяют тип данных.
Ответ 3
У меня красный, что nvarchar принимает дважды как varchar.
Да.
nvarchar используется для интернационализации.
Да.
что вы предлагаете мне использовать nvarchar или varchar?
Это зависит от приложения.
Ответ 4
По умолчанию перейдите к nvarchar. В наши дни очень мало оснований идти с варчаром, и все причины, чтобы пойти с nvarchar (позволяет международные символы, как обсуждалось).
Ответ 5
varchar - 1 байт на символ, nvarchar - 2 байта на символ.
Вы будете использовать больше пространства с nvarchar, но есть еще много допустимых символов. Дополнительное пространство ничтожно, но вы можете пропустить эти дополнительные персонажи в будущем. Даже если вы не ожидаете интернационализации, люди часто будут иметь неанглийские символы (например, é, ñ или ö) в своих именах.
Я предлагаю вам использовать nvarchar.
Ответ 6
У меня красный, что nvarchar принимает дважды как varchar
Да. Согласно Microsoft: "Размер хранилища в байтах в два раза превышает количество введенных символов + 2 байта" (http://msdn.microsoft.com/en-us/library/ms186939(SQL.90).aspx).
Но хранение дешево; Я никогда не беспокоюсь о нескольких дополнительных байтах.
Кроме того, сохраните проблемы в будущем и установите максимальную ширину на более щедрую, например, 100 символов. Для этого нет никаких накладных расходов на хранение, когда вы используете varchar или nvarchar (в отличие от char/nchar). Вы никогда не знаете, когда вы столкнетесь с тройной фамилией или длинным иностранным именем, которое превышает 30 символов.
nvarchar используется для интернационализации.
nvarchar может хранить любой символ юникода, например символы из нелатинских скриптов (арабский, китайский и т.д.). Я не уверен, как ваше приложение будет принимать данные (через Интернет, с помощью инструментария GUI и т.д.), Но, вероятно, любая технология, которую вы используете, поддерживает unicode из коробки. Это означает, что для любых введенных пользователем данных (таких как имя) всегда есть возможность получать нелатинские символы, если не сейчас, то в будущем.
Если бы я создавал новое приложение, я бы использовал nvarchar. Назовите это "будущая проверка", если хотите.
Ответ 7
Тип nvarchar - Unicode, поэтому он может обрабатывать практически любой символ, который существует на каждом языке на планете. Символы хранятся как UTF-16 или UCS-2 (не уверены, какие и различия тонкие), поэтому каждый символ использует два байта.
Тип varchar использует 8-битный набор символов, поэтому он ограничивается 255 символами набора символов, который вы выбираете для этого поля. Существует множество наборов символов, которые обрабатывают разные группы символов, поэтому обычно это достаточно, чтобы текст был локальным для страны или региона.
Если varchar работает для того, что вы хотите сделать, вы должны использовать это. Это немного меньше данных, поэтому он в целом немного быстрее. Если вам нужно обрабатывать самые разные символы, используйте nvarchar.
Ответ 8
по производительности:
причина использования varchar над nvarchar заключается в том, что вы можете иметь в ваших индексах в два раза больше символов! индексные ключи ограничены 900 байтами
на удобство использования:
если приложение предназначено только для английской аудитории и содержит английские имена, используйте varchar
Ответ 9
Данные для хранения: "Сунил"
varchar (5) принимает 7B
nvarchar (5) принимает 12B