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

Откуда:
Сообщений: 53
Работаем с MS SQL 2008. Необходимо записать данные в строку. Строка типа nvarchar(32). Говорят, что не могут записать шестнадцатиричные символы в этот тип (вроде как не помещается) и просят varchar(32). Действительно ли это имеет место быть? Подскажите. И ссылку, если можно, где об этом почитать. Заранее спасибо.
15 май 12, 14:41    [12556920]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
extrim
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 53
Как я понимаю, если написано 32 символа, то столько и влазит. Может проблема в том, что строку перегоняют неверно? Т.к. nvarchar - unicode? Или я что-то не втыкаю?
15 май 12, 14:53    [12557111]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
Glory
Member

Откуда:
Сообщений: 104751
extrim
Как я понимаю, если написано 32 символа, то столько и влазит.

Это байты, а не символы
15 май 12, 14:56    [12557142]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
extrim
Member [скрыт] [заблокирован]

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

а ну тогда всё верно? - в nvarchar влазиет меньше?
15 май 12, 14:57    [12557170]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
Glory
Member

Откуда:
Сообщений: 104751
extrim
а ну тогда всё верно? - в nvarchar влазиет меньше?

Ну так узнайте где нибудь, сколько байт занимает один unicode символ
15 май 12, 14:59    [12557205]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
Гузы
Guest
extrim,
select LEN(cast('Цццц' as varchar(4))), LEN(cast('Цццц' as nvarchar(4)))
15 май 12, 15:08    [12557317]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Гузы
extrim,
select LEN(cast('Цццц' as varchar(4))), LEN(cast('Цццц' as nvarchar(4)))

	select LEN(cast('Цццц' as varchar(4))), LEN(cast('Цццц' as nvarchar(4)))
	,DATALENGTH(cast('Цццц' as varchar(4))), DATALENGTH(cast('Цццц' as nvarchar(4)))
15 май 12, 15:15    [12557385]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
extrim
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 53
Glory
extrim
Как я понимаю, если написано 32 символа, то столько и влазит.

Это байты, а не символы

Ёлы-палы, это что получается? Что при выборе типа данных nvarchar, планируемое количество символов нужно на 2 умножать? А если я с 1Ской работаю, в какой кодировке она передает данные?

Гузы, и что? и там, и там 4.
15 май 12, 15:16    [12557401]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
Гузы
Guest
kDnZP
Гузы
extrim,
select LEN(cast('Цццц' as varchar(4))), LEN(cast('Цццц' as nvarchar(4)))

	select LEN(cast('Цццц' as varchar(4))), LEN(cast('Цццц' as nvarchar(4)))
	,DATALENGTH(cast('Цццц' as varchar(4))), DATALENGTH(cast('Цццц' as nvarchar(4)))

Ну и шо? Речь о символах, а не байтах.
15 май 12, 15:18    [12557416]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Гузы
Ну и шо? Речь о символах, а не байтах.

И таки что вам не нравится? Ваш ответ я дополнил, а не переписал.
15 май 12, 15:22    [12557452]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
extrim
Действительно ли это имеет место быть?
Нет.
В nvarchar(32) и в varchar(32) влезает одинаковое количество символов - 32.
15 май 12, 15:22    [12557454]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Да и вообще, ТС ведь хрен поймешь... Мало ли, может он про:
SELECT CAST(0x3244 AS VARCHAR(2)), CAST(0x3244 AS NVARCHAR(2))
15 май 12, 15:25    [12557477]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
extrim
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 53
Где правда? Что-то не воткну. Здесь http://msdn.microsoft.com/ru-ru/library/ms176089 про длину строки. В скобках байты или символы?

Glory
extrim
Как я понимаю, если написано 32 символа, то столько и влазит.

Это байты, а не символы


alexeyvg
extrim
Действительно ли это имеет место быть?
Нет.
В nvarchar(32) и в varchar(32) влезает одинаковое количество символов - 32.
15 май 12, 15:28    [12557508]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
Glory
Member

Откуда:
Сообщений: 104751
extrim
Где правда? Что-то не воткну. Здесь http://msdn.microsoft.com/ru-ru/library/ms176089 про длину строки. В скобках байты или символы?

Уже и по-русски читать не умеем ?

"Размер при хранении составляет n байт. "
15 май 12, 15:29    [12557519]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
Гузы
Guest
kDnZP,
И вправду. Екстрим одним словом...
15 май 12, 15:31    [12557542]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
extrim
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 53
kDnZP
Да и вообще, ТС ведь хрен поймешь... Мало ли, может он про:
SELECT CAST(0x3244 AS VARCHAR(2)), CAST(0x3244 AS NVARCHAR(2))


Видимо да, проблема в этом. Nvarchar тут не катит? Или с размерами проблема?
15 май 12, 15:35    [12557577]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3757
Glory
extrim
Где правда? Что-то не воткну. Здесь http://msdn.microsoft.com/ru-ru/library/ms176089 про длину строки. В скобках байты или символы?

Уже и по-русски читать не умеем ?

"Размер при хранении составляет n байт. "

И ??

Команда
CREATE TABLE test
(
C1 varchar(10),
C2 nvarchar(10)
)
совершенно однозначно создаст два столбца по 10 СИМВОЛОВ каждый.
При этом С2 будет иметь длинну 20 байт!
15 май 12, 15:35    [12557580]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
extrim
Где правда? Что-то не воткну.

Ниче, щаз я вас еще запутаю, если кодировка позволит:
SELECT  '䐲' RES, CAST('䐲' AS VARBINARY(MAX))
       ,SQL_VARIANT_PROPERTY('䐲', 'BaseType') BaseType
       --,SQL_VARIANT_PROPERTY('a', 'TotalBytes') TotalBytes 
       ,SQL_VARIANT_PROPERTY('䐲', 'MaxLength') MaxLength 
SELECT  N'䐲' RES, CAST(N'䐲' AS VARBINARY(MAX))
       ,SQL_VARIANT_PROPERTY(N'䐲', 'BaseType') BaseType
       --,SQL_VARIANT_PROPERTY(N'a', 'TotalBytes') TotalBytes 
       ,SQL_VARIANT_PROPERTY(N'䐲', 'MaxLength') MaxLength
15 май 12, 15:37    [12557601]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
extrim
Member [скрыт] [заблокирован]

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

щаз с nvarchar разберусь, потом за varbinary возьмусь =)
15 май 12, 15:39    [12557627]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
extrim
Где правда? Что-то не воткну. Здесь http://msdn.microsoft.com/ru-ru/library/ms176089 про длину строки. В скобках байты или символы?
В скобках символы.
15 май 12, 15:53    [12557813]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
extrim
Member [скрыт] [заблокирован]

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

Странно, как Glory, мог ошибиться в таком вопросе. Или может он что-то другое имел ввиду?
Если символы - то тогда проблем не должно возникать по идее. Значит зависит только от того, как обрабатываются данные перед записью? Т.е. как 16-ричную строку пытаются привести? Наподобие этого?:

select LEN(cast('Цццц' as varchar(4))), LEN(cast('Цццц' as nvarchar(4)))
	,DATALENGTH(cast('Цццц' as varchar(4))), DATALENGTH(cast('Цццц' as nvarchar(4)))
15 май 12, 15:58    [12557862]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
extrim
alexeyvg,

Странно, как Glory, мог ошибиться в таком вопросе. Или может он что-то другое имел ввиду?
Вы про это: 12557142 ?
Не знаю, может, не так понял вопрос...

extrim
Если символы - то тогда проблем не должно возникать по идее.
Непонятно, какая проблема; пусть те, кто "не могут записать шестнадцатиричные символы в этот тип (вроде как не помещается) и просят varchar(32)" скажут, что они имели в виду. Может, не "не помещается", а просто место хотят съэкономить?

extrim
Т.е. как 16-ричную строку пытаются привести? Наподобие этого?:
select LEN(cast('Цццц' as varchar(4))), LEN(cast('Цццц' as nvarchar(4)))
	,DATALENGTH(cast('Цццц' as varchar(4))), DATALENGTH(cast('Цццц' as nvarchar(4)))
А что такого в этом коде? Просто иллюстрация размера в байтах и размера в символах.
15 май 12, 16:16    [12558056]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
extrim
Member [скрыт] [заблокирован]

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

Проблема в том, что у них вроде как не помещается. По их словам пытаются 16-ричную строку туда записать.
15 май 12, 16:50    [12558377]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по типам данных varchar и nvarchar  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
extrim
alexeyvg,

Проблема в том, что у них вроде как не помещается. По их словам пытаются 16-ричную строку туда записать.
Ну пусть подробнее напишут. А то очень лаконично :-) Что они, 16-ричную строку из 1-го байта не могут положить в nvarchar(32) ?

Вы им опровержение пошлите:
declare @b nvarchar(32)
ser @b = '0123456789ABCDEF0123456789ABCDEF'
select @b
Вот видите, положил!!!
15 май 12, 17:37    [12558794]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить