varchar или nvarchar

13
задан Waheed 13 August 2009 в 22:29
поделиться

9 ответов

По сути, nvarchar означает, что вы можете обрабатывать множество алфавитов, а не только обычный английский. Технически это означает поддержку юникода, а не только ANSI. Это означает, что символы двойной ширины или примерно вдвое больше места. В наши дни дисковое пространство настолько дешево, что вы могли бы с таким же успехом использовать nvarchar с самого начала, вместо того, чтобы мучиться с необходимостью вносить изменения в течение жизненного цикла продукта.

Если вы уверены, что вам когда-либо понадобится поддерживать только один язык, вы могли бы придерживаться varchar, иначе я бы пошел с nvarchar.

Это обсуждалось на SO до здесь .

EDITED: изменено ascii на ANSI, как указано в комментарии.

19
ответ дан 1 December 2019 в 20:11
поделиться

Прежде всего, чтобы уточнить, nvarchar хранит данные Unicode, а varchar хранит данные ANSI (8-битные). Они функционируют одинаково, но nvarchar занимает вдвое больше места.

Обычно я предпочитаю хранить имена пользователей с использованием типов данных varchar , если только эти имена не содержат символы, выходящие за границы символов, которые varchar может хранить.

Это также зависит от сортировки базы данных. Например, вы не сможете хранить русские символы в поле varchar , если ваша сортировка базы данных LATIN_CS_AS . Но если вы работаете над локальным приложением, которое будет использоваться только в России, вы должны установить сортировку базы данных на русский язык.

7
ответ дан 1 December 2019 в 20:11
поделиться

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

1
ответ дан 1 December 2019 в 20:11
поделиться

varchar - 1 байт на символ, nvarchar - 2 байта на символ.

Вы будете использовать больше места с nvarchar, но есть намного больше допустимых символов. Дополнительное пространство незначительно, но вы можете пропустить эти лишние символы в будущем. Даже если вы не ожидаете, что потребуется интернационализация, люди часто будут иметь в своих именах неанглийские символы (например, é, ñ или ö).

Я бы посоветовал вам использовать nvarchar.

1
ответ дан 1 December 2019 в 20:11
поделиться

У меня красный, что nvarchar принимает вдвое больше, чем varchar

Да. Согласно Microsoft: «Размер хранилища в байтах в два раза превышает количество введенных символов + 2 байта» ( http://msdn.microsoft.com/en-us/library/ms186939 (SQL.90). aspx ).

Но хранение стоит дешево; Я никогда не беспокоюсь о нескольких лишних байтах.

Кроме того, избавьте себя от проблем в будущем и установите максимальную ширину на что-нибудь более широкое, например 100 символов. Когда вы используете varchar или nvarchar (в отличие от char / nchar), это не требует дополнительных затрат на хранение. Никогда не знаешь, когда встретишься с тройной фамилией или каким-то длинным иностранным именем, длина которого превышает 30 символов.

nvarchar используется для интернационализации.

nvarchar может хранить любой символ Юникода, например, символы нелатинских шрифтов (арабский, китайский и т. д.). Я не уверен, как ваше приложение будет принимать данные (через Интернет, с помощью набора инструментов графического интерфейса и т. Д.), Но вполне вероятно, что любая используемая вами технология поддерживает Unicode из коробки. Это означает, что для любых введенных пользователем данных (например, имени) существует всегда возможность получения нелатинских символов, если не сейчас, то в будущем.

Если бы я создавал новое приложение , Я бы использовал nvarchar. Если хотите, назовите это «ориентированным на будущее».

Это означает, что для любых введенных пользователем данных (например, имени) существует всегда возможность получения нелатинских символов, если не сейчас, то в будущем.

Если бы я создавал новое приложение , Я бы использовал nvarchar. Если хотите, называйте это «ориентированным на будущее».

Это означает, что для любых введенных пользователем данных (например, имени) существует всегда возможность получения нелатинских символов, если не сейчас, то в будущем.

Если бы я создавал новое приложение , Я бы использовал nvarchar. Если хотите, назовите это «ориентированным на будущее».

1
ответ дан 1 December 2019 в 20:11
поделиться

Тип nvarchar - Unicode, поэтому он может обрабатывать практически любой символ, который существует на всех языках на планете. Символы хранятся как UTF-16 или UCS-2 (не уверен, какие, и различия незначительны), поэтому каждый символ использует два байта.

Тип varchar использует 8-битный набор символов, поэтому он ограничен 255 символы набора символов, которые вы выбираете для поля. Существуют разные наборы символов, которые обрабатывают разные группы символов, поэтому обычно этого достаточно для текста, локального для страны или региона.

Если varchar работает для того, что вы хотите сделать, вы должны использовать его. Это немного меньше данных, поэтому в целом он немного быстрее. Если вам нужно обрабатывать большое количество символов, используйте nvarchar.

0
ответ дан 1 December 2019 в 20:11
поделиться

о производительности:
причина использовать varchar вместо nvarchar в том, что вы можете иметь в два раза больше символов в ваших индексах! ключи индекса ограничены 900 байтами
для удобства использования:
если приложение предназначено только для английской аудитории и содержит английские имена, используйте varchar

0
ответ дан 1 December 2019 в 20:11
поделиться

У меня есть красный, что nvarchar принимает вдвое больше, чем varchar.

Да.

nvarchar используется для интернационализации.

Да.

что вы предлагаете, следует ли использовать nvarchar или varchar?

Это зависит от приложения.

2
ответ дан 1 December 2019 в 20:11
поделиться

Данные в магазин: «Sunil»

Varchar (5) занимает 7b nvarchar (5) занимает 12b

0
ответ дан 1 December 2019 в 20:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: