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

Откуда:
Сообщений: 8
ситуация такая. в базе есть таблица с колонкой типа Image. в ней в бинарном виде в UTF-8 кодировке хранится xml. Я беру ХМЛ, декодирую его, делаю что мне нужно, затем нужно запихнуть его обратно. Но если сделать такого вида запрос
UPDATE dbname.dbo.tblname SET Stream = cast(cast('<?xml version="1.0" encoding="utf-8"?>...') WHERE Name = 'WP'

говорит, что XML parsing: line 1, character 115, illegal xml character (в позиции 115 - русские символы).

UPDATE dbname.dbo.tblname SET Stream = '<?xml version="1.0" encoding="utf-8"?>...' WHERE Name = 'WP'
- записывает, но при попытке распознать ХМЛ - русские символы заменяются на кракозябры.
6 апр 12, 16:34    [12377493]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
tsdaemon
Я беру ХМЛ, декодирую его, делаю что мне нужно

Это вы про два cast-а с символьной константой ?
tsdaemon
говорит, что XML parsing: line 1, character 115, illegal xml character (в позиции 115 - русские символы).

Как догадаться к какому типу вы делаете cast ?
6 апр 12, 16:53    [12377592]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
tsdaemon
Member

Откуда:
Сообщений: 8
tsdaemon
ситуация такая. в базе есть таблица с колонкой типа Image. в ней в бинарном виде в UTF-8 кодировке хранится xml. Я беру ХМЛ, декодирую его, делаю что мне нужно, затем нужно запихнуть его обратно. Но если сделать такого вида запрос
UPDATE dbname.dbo.tblname SET Stream = cast(cast('<?xml version="1.0" encoding="utf-8"?>...') as XML) as VARBINARY) WHERE Name = 'WP'

говорит, что XML parsing: line 1, character 115, illegal xml character (в позиции 115 - русские символы).

UPDATE dbname.dbo.tblname SET Stream = '<?xml version="1.0" encoding="utf-8"?>...' WHERE Name = 'WP'
- записывает, но при попытке распознать ХМЛ - русские символы заменяются на кракозябры.
6 апр 12, 17:18    [12377727]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
tsdaemon
Member

Откуда:
Сообщений: 8
Glory
tsdaemon
Я беру ХМЛ, декодирую его, делаю что мне нужно

Это вы про два cast-а с символьной константой ?

это я о том, что я беру из базы масив байт. к вышеприведенным запросам это отношения не имеет

Glory
tsdaemon
говорит, что XML parsing: line 1, character 115, illegal xml character (в позиции 115 - русские символы).

Как догадаться к какому типу вы делаете cast ?


забыл написать к чему приведение, пардон
6 апр 12, 17:21    [12377742]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
tsdaemon
это я о том, что я беру из базы масив байт. к вышеприведенным запросам это отношения не имеет

Вот именно.
Откуда сервер знает, что это есть символьная строка, да еще с национальными символами, да еще в utf-8 ?
6 апр 12, 17:24    [12377756]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
tsdaemon
Member

Откуда:
Сообщений: 8
Glory
tsdaemon
это я о том, что я беру из базы масив байт. к вышеприведенным запросам это отношения не имеет

Вот именно.
Откуда сервер знает, что это есть символьная строка, да еще с национальными символами, да еще в utf-8 ?


Для сервера это не имеет значения. Я сам декодирую массив байт в строку, используя utf-8. Вопрос в том, как потом символьную строку правильно передать обратно в базу?
6 апр 12, 17:33    [12377809]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
tsdaemon
Для сервера это не имеет значения.

С чего вы так решили то ?
tsdaemon
Вопрос в том, как потом символьную строку правильно передать обратно в базу?

Что значит "обратно в базу" ? Вы не на строне сервера что ли код пишите ?
6 апр 12, 17:35    [12377819]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
tsdaemon
Member

Откуда:
Сообщений: 8
Glory
tsdaemon
Для сервера это не имеет значения.

С чего вы так решили то ?
tsdaemon
Вопрос в том, как потом символьную строку правильно передать обратно в базу?

Что значит "обратно в базу" ? Вы не на строне сервера что ли код пишите ?


Вопрос предельно ясен. К чему ваши вопросы относятся, мне не понятно.
У меня есть символьная строка. Как мне составить запрос, что бы ее запихнуть в поле Image?
6 апр 12, 17:58    [12377973]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
tsdaemon
У меня есть символьная строка. Как мне составить запрос, что бы ее запихнуть в поле Image?

Командой UPDATE. Между типом char и binary поддерживается автоматическое преобразование

tsdaemon
Вопрос предельно ясен. К чему ваши вопросы относятся, мне не понятно.

К тому, что у вас в каждом сообщении меняется описание действий
6 апр 12, 18:02    [12377997]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
tsdaemon
Member

Откуда:
Сообщений: 8
Glory
tsdaemon
У меня есть символьная строка. Как мне составить запрос, что бы ее запихнуть в поле Image?

Командой UPDATE. Между типом char и binary поддерживается автоматическое преобразование


но при этом что-то происходит с кодировкой, русские символы после этого нечитабельны
6 апр 12, 18:09    [12378032]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
tsdaemon
но при этом что-то происходит с кодировкой, русские символы после этого нечитабельны

кодировка - это ваша проблема
У бинарных типов данных нет никаких кодировок
6 апр 12, 18:10    [12378043]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
tsdaemon
Member

Откуда:
Сообщений: 8
Glory
tsdaemon
но при этом что-то происходит с кодировкой, русские символы после этого нечитабельны

кодировка - это ваша проблема
У бинарных типов данных нет никаких кодировок


Если поддерживается автоматическое преобразование, то оно с использованием какой-то кодировки, верно?
6 апр 12, 18:20    [12378099]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
tsdaemon
Glory
пропущено...

кодировка - это ваша проблема
У бинарных типов данных нет никаких кодировок


Если поддерживается автоматическое преобразование, то оно с использованием какой-то кодировки, верно?
Я думаю неправильно. Думаю, что просто происходит приведение типов, то есть из строки байт со значением 23 так и записывается в поле типа IMAGE, не становится каким то другим байтом.
6 апр 12, 18:28    [12378127]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
tsdaemon
Если поддерживается автоматическое преобразование, то оно с использованием какой-то кодировки, верно?
Преобразовать можно только из чего-то конкретно в другое конкретно.
А у вас нет ваще кодировки с одной стороны.
Это как - из нечего конвертировать в что-то?!

Уже третий за сегодня, кто непонимает(мал) что такое строка.
6 апр 12, 19:01    [12378261]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
tsdaemon
Member

Откуда:
Сообщений: 8
alexeyvg
tsdaemon
пропущено...


Если поддерживается автоматическое преобразование, то оно с использованием какой-то кодировки, верно?
Я думаю неправильно. Думаю, что просто происходит приведение типов, то есть из строки байт со значением 23 так и записывается в поле типа IMAGE, не становится каким то другим байтом.


я так и думал. но тогда как записываются русские символы? в какой кодировке?
6 апр 12, 19:18    [12378321]     Ответить | Цитировать Сообщить модератору
 Re: Передача данных типа Image в sql запросе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
tsdaemon
alexeyvg
пропущено...
Я думаю неправильно. Думаю, что просто происходит приведение типов, то есть из строки байт со значением 23 так и записывается в поле типа IMAGE, не становится каким то другим байтом.


я так и думал. но тогда как записываются русские символы? в какой кодировке?
Тот байт, который в строке, тот и записывается.

Если вы видите русские символы в сиквельной строке (а не просто уверены, что они там должны быть), то значит в кодировке Windows.

Вообще для сиквела кодировка - это просто правила сортировки и сравнения. В принципе то, что вы туда положили, то и лежит, само никак не перекодируется.
6 апр 12, 20:20    [12378567]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить