2009-02-16 7 views
6

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

Есть ли причина, по которой я должен придерживаться простого варчара? Представление?

+0

Я бы добавил версию SQL Server на ваш вопрос, это может иметь значение? – Ash

+0

Я использую sql server 2005 в настоящее время, но мы хотим перейти в 2008 году. – mmcdole

ответ

1

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

+0

Хотя я не уверен, какую кодировку Юникода они используют в SQL SERVER, он может быть переменным. То есть, один символ в юникоде может быть где угодно от 1-4 байтов в некоторых кодировках. – mmcdole

+0

SQL Server исправлен UTF-16 –

+0

@Marc Gravell, gotchya. – mmcdole

11

В сегодняшнем i18n мире nvarchar имеет большой смысл. varchar может иметь смысл для данных, который указал не быть unicode (возможно, у вас есть некоторые системные поля, которые требуются для ASCII).

Я хотел бы использовать NVARCHAR по умолчанию для таких вещей, как имена, описание, адрес и т.д.

varchar меньше, так что есть, возможно, некоторые сбережения IO с varchar над nvarchar (но обратите внимание, что код-страница становится большая проблема тоже).

4

Кроме того, увидеть этот вопрос: VARCHAR vs NVARCHAR performance.

Лично я говорю придерживаться VARCHAR (как я ответил в этой теме). Существует нетривиальная служебная нагрузка.

1

Мы используем VARCHAR практически для всех, а NVARCHAR - очень часто.

коде продукт не нужно NVARCHAR - мы ничего, кроме AZ, 0-9 и не позволяют «_» в них ...

Свы вдвое больше места для хранения, но и только половина записи на индексную страницу (и на каждую страницу данных) и половину кэша памяти «потеряны», больше циклов ЦП для сравнения данных и т. д.

IME широко используемые иностранные акценты работают только в Varchar (то есть LATIN-1). У нас нет планов делать китайские или другие альтернативные наборы символов, и когда мы сможем справиться с этим набором символов, используя NVarchar с первого дня, мы будем меньше всего беспокоиться - выравнивание текста справа налево или по вертикали? :(

И если вы разрешили NVarchar, скажем, имя, как вы собираетесь вводить расширенный charcater с вашей клавиатуры? И если вы импортируете данные (так это уже NVarchar), как вы собираетесь способный искать этого клиента, используя стандартную QWERTY-клавиатуру. Много и много, что связано с интернационализацией приложения, поэтому я считаю, что нет смысла «разрешать его с помощью NVarchar».

Но там снова много мест I пойдите, чтобы иметь NVarchar ... и большинство столбцов также имеют ширину 50 символов ... они должны что-то знать о планах роста населения и планах расширения для почтовых индексов, которые у меня нет!

1

Как уже упоминалось, компромисс - это будущая защита от производительности. По моему опыту, SQL Server неплохо справляется с меньшими ограничениями в ЦП и памяти, но придает ему медленный дисковый ввод-вывод, и он действительно может перехватывать.

Если у вас нет планов на двухбайтовые наборы символов (например, иероглифы), придерживайтесь VARCHAR (MAX).

0

Вообще говоря; Начните с самого дорогого типа данных, который имеет наименьшие ограничения. Поместите его в производство. Если производительность начинает быть проблемой, узнайте, что на самом деле хранится в этих столбцах nvarchar. Есть ли там персонажи, которые не поместились бы в варчар? Если нет, переключитесь на varchar. Не пытайтесь предварительно оптимизировать, прежде чем вы узнаете, где боль. Я предполагаю, что выбор между nvarchar/varchar - это не то, что замедлит ваше приложение в предсказуемом будущем. Там будут другие части приложения, где настройка производительности даст вам гораздо больше ударов по долларам.