2016-02-29 1 views
1

У меня возникли проблемы с пониманием того, как определить столбец для моего текста, который имеет правильный размер для моего макс. количество символов. В Oracle я могу создать VARCHAR2(10 CHAR), который будет достаточно большим для 10 символов. Размер зависит от кодировки, используемой в базе данных. Но как это сделать в SQL Server? Использую ли я varchar(10)? nvarchar(10)? Я хочу иметь возможность хранить всевозможные персонажи (даже китайские).Какой тип данных и размер для текста с n символами в SQL Server?

+1

Я действительно не думаю, что это дубликат, потому что я до сих пор не знаю, насколько большой мой тип данных должен быть для нескольких n символов. – John

ответ

2

Если вы хотите китайских иероглифов, вам нужно использовать nvarchar(n) и указать длину n, что имеет смысл.

Это символов, которые вы определяете, и пространство, в котором вы нуждаетесь, в два раза больше (поскольку любой символ Юникода в SQL Server всегда использует 2 байта).

Макс. размер nvarchar(4000) - или если вам действительно нужно больше, используйте nvarchar(max) (до 1 миллиард символов).

Я бы порекомендовал НЕ просто использовать nvarchar(max) для всего, из ленивости о том, какой размер вам действительно нужен! Поскольку это действительно большой столбец, вы не сможете индексировать его для одного.

0

Если вы используете nvarchar(max), это позволит использовать любое количество символов для всех наборов символов. Система оптимизирует хранение.

Ограничения по размеру строки адресуются here. См. Ответ от @marc_s относительно ограничений использования max.

+0

И это не вызовет никаких проблем, если я создам большое количество столбцов? – John

+0

Вы не сможете ** индексировать ** такой столбец - я бы рекомендовал *** НЕ *** просто использовать 'nvarchar (max)' для всего, из ленивости подумать о том, какой размер вы ** действительно ** нужно - использовать 'nvarchar' для символов Unicode, но выберите ** значимую, полезную ** длину! –

+0

Но вот почему я спрашиваю здесь. Какова была бы значимая длина для 10 китайских символов? Будет ли это nvarchar (10)? – John

Смежные вопросы