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

Откуда:
Сообщений: 1310
Подскажите, пожалуйста, чем один отличается от другого?
__________________________________________________________________
THE TRUTH IS OUT THERE
27 сен 11, 16:00    [11342906]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar vs varchar  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
mr_max
Подскажите, пожалуйста, чем один отличается от другого?
__________________________________________________________________
THE TRUTH IS OUT THERE
первый - двухбайтовый юникод
27 сен 11, 16:01    [11342914]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar vs varchar  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
mr_max,

одно Unicode другое nativ
27 сен 11, 16:02    [11342925]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar vs varchar  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Как посмотреть разницу с помощью скрипта?
DECLARE @s1 AS VARCHAR(10)
DECLARE @s2 AS NVARCHAR(10)
DECLARE @s3 AS CHAR(10)

SELECT @s1 ='123',@s2 ='123',@s3 ='123'

SELECT LEN(@s1), LEN(@s2), LEN(@s3)
Не показывает. Думал длина будет разная.
27 сен 11, 16:31    [11343238]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar vs varchar  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
trew, datalength()
27 сен 11, 16:33    [11343258]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar vs varchar  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Shakill,

Спасибо, показывает:)
27 сен 11, 16:34    [11343280]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar vs varchar  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
trew
Как посмотреть разницу с помощью скрипта?
DECLARE @s1 AS VARCHAR(10)
DECLARE @s2 AS NVARCHAR(10)
DECLARE @s3 AS CHAR(10)

SELECT @s1 ='123',@s2 ='123',@s3 ='123'

SELECT LEN(@s1), LEN(@s2), LEN(@s3)
Не показывает. Думал длина будет разная.
Один символ в юникоде - 2 байта.
LEN показывает длину в символах. Надо DATALENGTH.
Кроме того литеральные юникодные строки предваряются буквой N
DECLARE @s1 AS VARCHAR(10)
DECLARE @s2 AS NVARCHAR(10)
DECLARE @s3 AS CHAR(10)

SELECT @s1 ='123',@s2 =N'123',@s3 ='123'

SELECT DATALENGTH(@s1), DATALENGTH(@s2), DATALENGTH(@s3)
CHAR от VARCHAR отличаются хранением хвостовых пробелов.
VARCHAR их всегда отбрасывает. А CHAR дополняет ими строку до полной длины.
27 сен 11, 16:37    [11343315]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar vs varchar  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
iap,

автор
Кроме того литеральные юникодные строки предваряются буквой N

Немного не понятно. Русский текст около 50 символов в чем хранить? (проектирование базы данных, VB.net интерфейс)
NVARCHAR(50)

юникодные строки - это важно знать при загрузке данных в базу, а больше никак не используется. верно?
27 сен 11, 17:21    [11343698]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar vs varchar  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
trew, если у вас возможно использование нескольких языков для поля - то чтобы не было мучительно больно, - нужно использовать юникод. Если же вам критичны размеры таблицы и вы уверены, что однобайтового хранения вам достаточно, - то использовать не юникод.

SELECT N'Тест, test, '+NCHAR(946), CAST(N'Тест, test, '+NCHAR(946) AS VARCHAR(MAX))
27 сен 11, 17:30    [11343791]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar vs varchar  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
trew
Русский текст около 50 символов в чем хранить?
В NVARCHAR
trew
юникодные строки - это важно знать при загрузке данных в базу, а больше никак не используется. верно?
Почему, сервер же с этими строками будет работать. Теоретически можно без юникода, но с ним проще

А абсолютно он необходим, если используется более одного языка, кроме английского
27 сен 11, 17:36    [11343835]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить