Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Зачем nchar и nvarchar, если есть ntext?  [new]
farrex
Member

Откуда:
Сообщений: 12
Уважаемые знатоки SQL!
Поиск в гугле не дал мне ясности, прошу прощения, за глупые вопросы...
Объяснение на MSDN мне не дало ответов на все мои вопросы, к сожалению. Если дадите ссылку на статью про это тоже буду рад!

1) зачем заморачиваться с выбором nchar, nvarchar и ntext? если, как я понял, ntext - самый полный и занимает ровно столько, сколько добавлено в поле.

2) В чем плюсы и минусы их?

3) когда лучше использовать какждый из них?

4) если задать nchar(100), то он всегдва будет занимать одно и то же количество байт? (я так понимаю 200), даже, если там будет всего 1 символ? и то же самое для nvarchar(n)?

Заранее спасибо!
7 сен 11, 13:13    [11240241]     Ответить | Цитировать Сообщить модератору
 Re: Зачем nchar и nvarchar, если есть ntext?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
farrex
Уважаемые знатоки SQL!
Поиск в гугле не дал мне ясности, прошу прощения, за глупые вопросы...
Объяснение на MSDN мне не дало ответов на все мои вопросы, к сожалению. Если дадите ссылку на статью про это тоже буду рад!

1) зачем заморачиваться с выбором nchar, nvarchar и ntext? если, как я понял, ntext - самый полный и занимает ровно столько, сколько добавлено в поле.

2) В чем плюсы и минусы их?

3) когда лучше использовать какждый из них?

4) если задать nchar(100), то он всегдва будет занимать одно и то же количество байт? (я так понимаю 200), даже, если там будет всего 1 символ? и то же самое для nvarchar(n)?

Заранее спасибо!

ntext вообще использовать не рекомендуется, ибо устарело, вместо ntext, nvarchar(max). Ну и еще попробуйте ntext поиспользовать во всяких строковых операциях, сами поймете что к чему.
про размер, вот, выполните:
declare @a nchar(100), @b nvarchar(100)
select @a = '1', @b = '1'
select datalength(@a),datalength(@b)
7 сен 11, 13:19    [11240300]     Ответить | Цитировать Сообщить модератору
 Re: Зачем nchar и nvarchar, если есть ntext?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
1-3:
BOL
ntext, text, and image data types will be removed in a future version of Microsoft SQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max), varchar(max), and varbinary(max) instead.


4. BOL->SET ANSI_PADDING
7 сен 11, 13:20    [11240310]     Ответить | Цитировать Сообщить модератору
 Re: Зачем nchar и nvarchar, если есть ntext?  [new]
iljy
Member

Откуда:
Сообщений: 8711
farrex,

предвосхищая вопрос "почему не использовать всегда и везде nvarchar(max)":
1. Его нельзя использовать в индексах.
2. Обычно поля max храняться на отдельных страницах с использованием специального механизма ( http://msdn.microsoft.com/ru-ru/library/ms189087.aspx )
3. Ну и, наконец, банальное - в некоторых случаях бизнес-логика требует ограничения на длину используемых строк, и самое простое - реализовать его, установив максимальный размер поля.

Сообщение было отредактировано: 7 сен 11, 14:16
7 сен 11, 13:36    [11240441]     Ответить | Цитировать Сообщить модератору
 Re: Зачем nchar и nvarchar, если есть ntext?  [new]
farrex
Member

Откуда:
Сообщений: 12
Огромное спасибо!
Если я правильно понял, то nvarchar занимает ровно столько места (в 2 раза больше ест-но), сколько занесено символов в поле. А nchar(n) всегда фиксированное значение 2*n.

тогда nchar где используется? тоже в каких-то специфических задачах, когда надо, чтобы все поля занимали одинаковое количество байт?
7 сен 11, 13:52    [11240569]     Ответить | Цитировать Сообщить модератору
 Re: Зачем nchar и nvarchar, если есть ntext?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
farrex
тогда nchar где используется? тоже в каких-то специфических задачах, когда надо, чтобы все поля занимали одинаковое количество байт?
Да, например, поле заполнено каким то кодом постоянной длинны.

Тогда глупо тратить 2 байта на указание одного и того же размера и потом ещё замедлять манипулирование данными.
7 сен 11, 13:55    [11240586]     Ответить | Цитировать Сообщить модератору
 Re: Зачем nchar и nvarchar, если есть ntext?  [new]
iljy
Member

Откуда:
Сообщений: 8711
farrex
Огромное спасибо!
Если я правильно понял, то nvarchar занимает ровно столько места (в 2 раза больше ест-но), сколько занесено символов в поле. А nchar(n) всегда фиксированное значение 2*n.

тогда nchar где используется? тоже в каких-то специфических задачах, когда надо, чтобы все поля занимали одинаковое количество байт?

Для полей переменной длинны дополнительно хранится заголовок (16 вроде байт, счас сходу не помню), и, если у вас короткие строки, может оказаться выгоднее хранить char. Опять же бывают случаи полей фиксированной ширины - всякие трехбуквенные коды аэропортов например.
7 сен 11, 13:57    [11240602]     Ответить | Цитировать Сообщить модератору
 Re: Зачем nchar и nvarchar, если есть ntext?  [new]
iljy
Member

Откуда:
Сообщений: 8711
iljy,

не, не 16, 2 байта, это я с varchar(max)-text попутал
7 сен 11, 13:59    [11240624]     Ответить | Цитировать Сообщить модератору
 Re: Зачем nchar и nvarchar, если есть ntext?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
iljy
iljy,
не, не 16, 2 байта, это я с varchar(max)-text попутал
От ведь, как-будто в исходник заглянул =)

farrex
тогда nchar где используется? тоже в каких-то специфических задачах, когда надо, чтобы все поля занимали одинаковое количество байт?
Да, во всяких устоявшихся форматах. У нас например еще используется дла всяческих служебных кодов и статусов. Где формат статуса строго определен и не меняется. Нет нужды задействовать под это дело поле переменной длинны.
7 сен 11, 14:12    [11240738]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить