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

Откуда: Latvija
Сообщений: 145
Делаю элементарную выборку из таблицы, где три текстовых поля имеют размер 4000 символов (nvarchar(4000)).
SELECT
[ID],
ISNULL(LTRIM(RTRIM([Name])), ''),
ISNULL(LTRIM(RTRIM([NameEN])), ''),
ISNULL(LTRIM(RTRIM([NameRU])), '')
FROM [tbl_AccountActivity]

В самой студии все отрабатывает нормально. Но полученные данные я использую для формирования xml-файла. И вот именно с этими данными я там получаю длинную строку с кучей символов : �
В результате чего у меня даже размер файла вырастает с 3 Мб до 27. А сформированный xml мне надо передевать методом POST клиенту.

Как можно убрать эти символы?
(файл формируется с помощью C#)
17 сен 13, 13:21    [14849045]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar(4000) и странные символы в xml-файле  [new]
Naile
Member

Откуда: Latvija
Сообщений: 145
так... символы преобразовались.
Покажу их по другому : & # x 0 ;
17 сен 13, 13:22    [14849054]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar(4000) и странные символы в xml-файле  [new]
Glory
Member

Откуда:
Сообщений: 104751
Naile
Как можно убрать эти символы?

Если "В самой студии все отрабатывает нормально. ", то значит сервер не имеет никакого отношения к симвоам, которые ваши приложение записывает в файл
17 сен 13, 13:23    [14849067]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar(4000) и странные символы в xml-файле  [new]
Naile
Member

Откуда: Latvija
Сообщений: 145
Тогда такой вопрос : почему для поля, которое имеет тип nvarchar(4000), запрос
LEN(LTRIM(TRRIM(Name))
равен 4000? Хотя реально там текст из 300 символов. Как же тогда выделить реальный текст? Без учета всех 4000 символов?
17 сен 13, 13:35    [14849194]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar(4000) и странные символы в xml-файле  [new]
Naile
Member

Откуда: Latvija
Сообщений: 145
LTRIM(RTRIM(Name))

имела в виду
17 сен 13, 13:36    [14849201]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar(4000) и странные символы в xml-файле  [new]
Glory
Member

Откуда:
Сообщений: 104751
Naile
Тогда такой вопрос : почему для поля, которое имеет тип nvarchar(4000), запрос
LEN(LTRIM(TRRIM(Name))

равен 4000? Хотя реально там текст из 300 символов.

Потому что кто-то ошибается насчет типа поля. И это не сервер

ЗЫ
Функция len и так возвращает длину строки без ведомых пробелов.
17 сен 13, 13:38    [14849219]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar(4000) и странные символы в xml-файле  [new]
StarikNavy
Member

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

потому что LTRIM, TRRIM не меняют размер поля
используйте cast
17 сен 13, 13:41    [14849238]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar(4000) и странные символы в xml-файле  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Naile
Тогда такой вопрос : почему для поля, которое имеет тип nvarchar(4000), запрос
LEN(LTRIM(TRRIM(Name))
равен 4000? Хотя реально там текст из 300 символов.

Какой последний символ из этих 300? И чему равно это значение?
UNICODE(RIGHT(Name, 1))
17 сен 13, 13:43    [14849254]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar(4000) и странные символы в xml-файле  [new]
StarikNavy
Member

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

ссори, был не прав, поторопился с ответом
у вас скорее всего какой-то символ в конце строки
17 сен 13, 13:48    [14849278]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar(4000) и странные символы в xml-файле  [new]
Naile
Member

Откуда: Latvija
Сообщений: 145
Гость333,
Вот такой запрос
SELECT 
	[ID],
	ISNULL(LTRIM(RTRIM([Name])), ''),
	ISNULL(LTRIM(RTRIM([NameEN])), ''), 
	ISNULL(LTRIM(RTRIM([NameRU])), ''),
           LEN(LTRIM(RTRIM([Name]))),
           cast([Name] as varchar),
           LEN(LTRIM(RTRIM(cast([Name] as varchar)))),
           UNICODE(RIGHT(Name, 1))
FROM 
	[tbl_AccountActivity] 


дает вот такой ответ
38971DAF-D74F-48F6-BD57-B92124211342
paper processing, printing: business forms, cash register paper(rolls), fax paper(rolls), universal tape(rolls), cardboard, notebooks, writing-pads etc.
4000
paper processing, printing: bu
29
0
17 сен 13, 15:11    [14849848]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar(4000) и странные символы в xml-файле  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Naile
Гость333,
           UNICODE(RIGHT(Name, 1))


дает вот такой ответ
0

У вас в конце символы с нулевыми кодами. В SSMS они никак не отображаются, а в XML преобразуются в & # x 0 ;
Неплохо было бы разобраться, откуда такие символы берутся в вашей таблице.
Если ничего с этим поделать нельзя, при формировании XML заменяйте их на пустые символы при помощи REPLACE.
17 сен 13, 15:29    [14849956]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar(4000) и странные символы в xml-файле  [new]
Гость333
Member

Откуда:
Сообщений: 3683
примерно так:
ISNULL(LTRIM(RTRIM(REPLACE([Name], CHAR(0), ''))), ''),
17 сен 13, 15:31    [14849971]     Ответить | Цитировать Сообщить модератору
 Re: nvarchar(4000) и странные символы в xml-файле  [new]
Naile
Member

Откуда: Latvija
Сообщений: 145
Гость333
при формировании XML заменяйте их на пустые символы при помощи REPLACE

Да. Так я уже сделала. Просто думала - может есть какой-то более умный способ.

Спасибо.
17 сен 13, 16:27    [14850294]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить