Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 подскажите по image (binary)  [new]
o-o
Guest
мне сегодня впервые довелось посмотреть на динозаврика --
подарили табличку с полем типа image.
хотят из этого получить символьное представление, вот просто тупо конвертировать в varchar(max).
какие-то строки сконвертировались (с предварительной конвертацией в varbinary(max)), и все ок,
а какие-то в пустоту превратились.
что у них другого, у несконвертированных? лидирующие нули.
т.е. вот такое:
0x0205785E7D51D14E833014F5534C конвертируется,
а вот такое выдает пустоту:
0x00205785E7D51D14E833014F5534C (на 1 лидирующий 0 больше)

select 
       cast (0x0205785E7D51D14E833014F5534C as varchar(200))  as with_0,
       cast (0x00205785E7D51D14E833014F5534C as varchar(200)) as with_00
-----------------------------
with_0	          with_00
x^}QÑNƒ0õSL	


2 вопроса:
1. почему 2 и более нулей в начале мешают всему остальному сконвертироваться
2. как бы эти нули порезать? т.е. просто я вообще не знаю, какие операции имеются над image
(ну или над varbinary)
21 мар 14, 19:22    [15768617]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
o-o
мне сегодня впервые довелось посмотреть на динозаврика --
подарили табличку с полем типа image.
хотят из этого получить символьное представление, вот просто тупо конвертировать в varchar(max).
какие-то строки сконвертировались (с предварительной конвертацией в varbinary(max)), и все ок,
В каком смысле "динозаврик"? Конвертация из varbinary(max) и image абсолютно одинакова.

o-o
2 вопроса:
1. почему 2 и более нулей в начале мешают всему остальному сконвертироваться
2. как бы эти нули порезать? т.е. просто я вообще не знаю, какие операции имеются над image
(ну или над varbinary)
1. Лидирующие нули конвертации не мешают, всё работает нормально. Просто приложение SSMS не умеет выводить такие строки на экран.

2. над varbinary можно производить операцию REPLACE
21 мар 14, 19:29    [15768640]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
varbinary
Guest
o-o
мне сегодня впервые довелось посмотреть на динозаврика --
подарили табличку с полем типа image.
хотят из этого получить символьное представление, вот просто тупо конвертировать в varchar(max).
какие-то строки сконвертировались (с предварительной конвертацией в varbinary(max)), и все ок,
а какие-то в пустоту превратились.
что у них другого, у несконвертированных? лидирующие нули.
т.е. вот такое:
0x0205785E7D51D14E833014F5534C конвертируется,
а вот такое выдает пустоту:
0x00205785E7D51D14E833014F5534C (на 1 лидирующий 0 больше)

select 
       cast (0x0205785E7D51D14E833014F5534C as varchar(200))  as with_0,
       cast (0x00205785E7D51D14E833014F5534C as varchar(200)) as with_00
-----------------------------
with_0	          with_00
x^}QÑNƒ0õSL	


2 вопроса:
1. почему 2 и более нулей в начале мешают всему остальному сконвертироваться
2. как бы эти нули порезать? т.е. просто я вообще не знаю, какие операции имеются над image
(ну или над varbinary)

во второй строке нечетное кол-во цифорок, пол байта храните?
у вас в начале строки 0x00 символ, он скорее всего строку и "ломает"
21 мар 14, 19:33    [15768671]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
varbinary
Guest
alexeyvg
2. над varbinary можно производить операцию REPLACE


REPLACE работает со строками и вызывает неявную конвертацию, смотрите план

[url=]declare @t table (a varbinary(100))

insert @t (a)
select 0x0002



select REPLACE(a, 0x0002, 0x02)
from @t[/url]



а вот substring работает с байтами

[url=]declare @t table (a varbinary(100))

insert @t (a)
select 0x0002

select SUBSTRING(a, 1, 1)
from @t[/url]
21 мар 14, 19:41    [15768723]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
varbinary
Guest
varbinary
alexeyvg
2. над varbinary можно производить операцию REPLACE


REPLACE работает со строками и вызывает неявную конвертацию, смотрите план

declare @t table (a varbinary(100))

insert @t (a)
select 0x0002



select REPLACE(a, 0x0002, 0x02)
from @t




а вот substring работает с байтами

declare @t table (a varbinary(100))

insert @t (a)
select 0x0002

select SUBSTRING(a, 1, 1)
from @t


мимо тега промахнулся
21 мар 14, 19:42    [15768730]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
o-o
Guest
динозаврик: мне казалось, что image-и это пережитки 2000-ого :)

>>>Конвертация из varbinary(max) и image абсолютно одинакова

да прям. напрямую из image выдает ошибку:
Explicit conversion from data type image to varchar(max) is not allowed
а напрямую из varbinary -- конвертирует, не пикнув

ок, им надо не просто "сконвертировать", а чтобы "студия показала", т.е. нули придется порезать
(а какие проблемы с нулями-то? вроде ж как берет по 2 цифры и тупо их в символ переводит.
ну и если несколько первых "непечатные", то остальные почему не выводит?)

за REPLACE спасибо
21 мар 14, 19:43    [15768731]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
o-o
Guest
varbinary
во второй строке нечетное кол-во цифорок, пол байта храните?


обе строки обрезанные. в форум целиком имеющееся закопировать -- это зачем бы?
ну, замените на вот такое:
select 
       cast (0x0205785E7D51D14E833014F5534C as varchar(200))  as with_0,
       cast (0x000205785E7D51D14E833014F5534C as varchar(200)) as with_00


varbinary
у вас в начале строки 0x00 символ, он скорее всего строку и "ломает"


вот это и хотелось понять.
в целях расширения кругозора, не более :)
не подскажете, почему "ломает"?
21 мар 14, 19:49    [15768750]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
varbinary
Guest
o-o
varbinary
во второй строке нечетное кол-во цифорок, пол байта храните?


обе строки обрезанные. в форум целиком имеющееся закопировать -- это зачем бы?
ну, замените на вот такое:
select 
       cast (0x0205785E7D51D14E833014F5534C as varchar(200))  as with_0,
       cast (0x000205785E7D51D14E833014F5534C as varchar(200)) as with_00


varbinary
у вас в начале строки 0x00 символ, он скорее всего строку и "ломает"


вот это и хотелось понять.
в целях расширения кругозора, не более :)
не подскажете, почему "ломает"?

я думаю by design
21 мар 14, 20:00    [15768795]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
o-o,

Переключите студию на текстовое представление результата
21 мар 14, 20:32    [15768896]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
Или так
select 
       cast(0x0205785E7D51D14E833014F5534C as varchar(200))  as with_0,
       replace(cast(0x000205785E7D51D14E833014F5534C as varchar(200)), char(0), '') as with_00
21 мар 14, 20:33    [15768904]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
o-o
динозаврик: мне казалось, что image-и это пережитки 2000-ого :)

>>>Конвертация из varbinary(max) и image абсолютно одинакова

да прям. напрямую из image выдает ошибку:
Explicit conversion from data type image to varchar(max) is not allowed
а напрямую из varbinary -- конвертирует, не пикнув
Ну да, это я согласен, я просто имел в виду, что ваша проблема не связана с типом image.
o-o
varbinary
у вас в начале строки 0x00 символ, он скорее всего строку и "ломает"


вот это и хотелось понять.
в целях расширения кругозора, не более :)
не подскажете, почему "ломает"?
Я же говорю - это баг в приложении SSMS (а в ранних версиях - в Enterprise Manager).

Просто оно на С написано, и где то случайно вкорячили какую нибуть сишную строковую функцию, которая естественно 0 воспринимает как конец строки. Править никто не будет, потому что проблема не сказывается на бизнесе.
invm
o-o,

Переключите студию на текстовое представление результата
Да, интересно, а EM раньше вроде в текстовом виде тоже не показывал... Хотя могу и ошибаться.
21 мар 14, 22:43    [15769327]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
o-o
Guest
спасибо всем!!!
уже REPLACE-ом решилось, но сколько всего нового :)
а мне EM не довелось увидеть, я в теме "недавно"

to alexeyvg:
да мне как бы с самого начала понятно было, что все одна байда image <-> binary,
что и отражено в самом названии топика :)
просто ну мало-ли, вдруг были какие-то функции-атавизмы для работы с image,
к-ые канули в лету с появлением varbinary(max),
думаю, укажу все, как есть, мало-ли.
в интернете-то хэлп от 2000 уж и не выпадает, сразу дают 2012 и спасибо, что есть 2008 и 2005.
22 мар 14, 00:06    [15769702]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
o-o
в интернете-то хэлп от 2000 уж и не выпадает, сразу дают 2012 и спасибо, что есть 2008 и 2005.
Хинт: если изменить язык на английский (или поменять в ссылке ru-ru на en-us), то появится хелп по SQL Server 2000. Просто русского хелпа до 2005 не было.

Версии ранее 2000 действительно нет, увы :-(
22 мар 14, 01:41    [15769981]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
o-o
Guest
alexeyvg,

у меня знаете, что делает в последнее время?
вообще, зараза такая, не дает язык сменить.
какой-то странный msdn вываливается, завешиваю картинку.
ткните мне, ну вот ГДЕ тут смена языка?
т.е. дома еще ладно, цивильный браузер и цивильный язык.
а на работе, простите, все установлено на непотребном языке
и хэлп на нем же и вываливается.
мне уже просто невозможно ссылки людям давать!
вот, помню, про CTE мне выдался сегодня msdn нового образца.
демонстрирую.
кстати, вот ведь дома чистейший en-us...а все равно версии дает 2005-2012

К сообщению приложен файл. Размер - 54Kb
22 мар 14, 02:12    [15770016]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
o-o
Guest
не, ну что про CTE нет и не могло быть в 2000, это норм :)
...но про смену языка...куда дели? ведь была раньше удобная кликалка в правом верхнем углу
22 мар 14, 02:33    [15770049]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
mimohod765478
Guest
http://technet.microsoft.com/en-us/library/ms187745.aspx

В ссылке просто меняем en-us на ru-ru :-)

http://technet.microsoft.com/ru-ru/library/ms187745.aspx
22 мар 14, 09:09    [15770326]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
o-o
Guest
ну т.е. ручками.
я так и делаю, чтоб на форуме постить ссылки.
это, видимо, новая политика такая, попытка отучить от мышкакликанья
22 мар 14, 10:04    [15770374]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
o-o
у меня знаете, что делает в последнее время?
вообще, зараза такая, не дает язык сменить.
Мда, убрали "сменить язык" :-(
Раньше было...
Я не понимаю, они дают задания "ухудшить MSDN", и планомерно ухудшают???

o-o
не, ну что про CTE нет и не могло быть в 2000, это норм :)
Ну да, выбирать версии из этого списка ненадёжно. Что бы посмотреть версии - нужно в дереве слева выбрать "SQL Server", тогда покажет все версии, если выбран английский.
22 мар 14, 12:15    [15770526]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
aleks2
Guest
o-o
(а какие проблемы с нулями-то? вроде ж как берет по 2 цифры и тупо их в символ переводит.


char(0) - это окончание строки в C.

select 'бла-бла'+CHAR(0)+'бла-бла'


Вангую, MS SQL на Си написан.
22 мар 14, 12:34    [15770579]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
aleks2
Guest
Да и не факт, что это MS SQL виноватый - может и клиент резать...
22 мар 14, 12:50    [15770610]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
aleks2
Да и не факт, что это MS SQL виноватый - может и клиент резать...
Клиент, конечно.
Это видно из того, что в SSMS при переключении отображения в "текст" не режет.
22 мар 14, 15:13    [15770865]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
o-o
вообще, зараза такая, не дает язык сменить.
ткните мне, ну вот ГДЕ тут смена языка?
У меня с давних времён не работал, поэтому и висит букмарклет.
Создаёте Буркмарк на панели:
Название: msdn@ru
Адрес: javascript:var%20l=window.location;l.href=l.href.replace(/(&l=EN-US&)/g,"&l=RU-RU&").replace(/(\/en-us\/)/g,"/ru-ru/");void(0)
И не долго думая тыкнул и смотришь в своём языке.
Ну там естественно свой поисковик для msdn, чтобы сразу нужное найти и не копаться в гугловском говне.

У меня даже меню выбора версии сервера не работает. Да и вообще по сходили с ума, все им кукисы подавай, словно они необходимы для нормальной работы.
23 мар 14, 00:57    [15772607]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
o-o
Guest
не знаю, кто посходил с ума, но мне хэлп продукта нормальнее всего читать в оригинале.
а что оно настырно считывает язык браузера и мне на нем подсовывает, это безобразие.
ненавижу переведенное. извращаться должен тот, кто желает переведенное.
а оригинальный хэлп должен выпадать без всяких телодвижений. IMHO
23 мар 14, 02:41    [15772752]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
alexeyvg
Мда, убрали "сменить язык" :-(
Раньше было...
Смену языка сделали слева внизу. Оригинально.
Но выбор языка у них и без этого был неудобный. Я просто в строке адреса исправлял "ru-ru" на "en-us".
24 мар 14, 07:13    [15775219]     Ответить | Цитировать Сообщить модератору
 Re: подскажите по image (binary)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
Ruuu
Смену языка сделали слева внизу. Оригинально.
А, действительно :-)
А я ведь искал внизу, была мысль, что перенесли.

Я тоже всегда менял ссылку, этот выбор в последнее время совсем уродский, с отдельной страницей.

Вообще конечно нужно сделать выбор родного языка, и переключатель - родной и английский.
Потому что английский - нативный язык для документации, и многим нужно переключаться туда-сюда, если используется не только английский.
24 мар 14, 09:17    [15775423]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить