powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Исправление поля image
16 сообщений из 16, страница 1 из 1
Исправление поля image
    #39856248
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при записи в поле image данных в формате Base64 записался символ #0 осле каждых двух битов. Произошло из-за неверного преобразования данных в толстом клиенте.
т.е.:
записалось :
Код: sql
1.
0x4A0056004200450052006900300078004C006A0051004B004A0065004C006A007A0039004D004B004E


а должно быть:
Код: sql
1.
0x4A564245526930784C6A514B4A654C6A7A394D4B4E



как мне убрать эти нули запросом (sql 2008)?
...
Рейтинг: 0 / 0
Исправление поля image
    #39856250
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не конвертировать в юникодную строку по дороге.
...
Рейтинг: 0 / 0
Исправление поля image
    #39856251
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как исправить ошибку в толстом клиенте я знаю.
Как исправить уже созданные неверные строки в БД sql запросом?
...
Рейтинг: 0 / 0
Исправление поля image
    #39856253
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр,

однако, почему бы не изменить тип IMAGE на VARBINARY(MAX)?
...
Рейтинг: 0 / 0
Исправление поля image
    #39856254
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и что дальше?
...
Рейтинг: 0 / 0
Исправление поля image
    #39856255
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петр,

Приемрно так: достать из image и отконвертить varbinary -> nvarchar -> varchar -> varbinary -> image.
Но лучше сначала image в varbinary, как советуют.
...
Рейтинг: 0 / 0
Исправление поля image
    #39856256
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
declare
    @bin varbinary (100) = 0x4A0056004200450052006900300078004C006A0051004B004A0065004C006A007A0039004D004B004E

select
    @bin
    ,  cast ( cast (  cast( @bin as nvarchar (100) ) as varchar (100) ) as varbinary (100) )  
...
Рейтинг: 0 / 0
Исправление поля image
    #39856259
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да вроде получается
Код: sql
1.
s4 = convert(image, convert(varbinary(max), convert(varchar(MAX), convert(nvarchar(MAX), convert(VARBINARY(MAX), fblob)))))



вопрос только в том хватит ли размера nvarchar(MAX)?
...
Рейтинг: 0 / 0
Исправление поля image
    #39856260
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петрда вроде получается
Код: sql
1.
s4 = convert(image, convert(varbinary(max), convert(varchar(MAX), convert(nvarchar(MAX), convert(VARBINARY(MAX), fblob)))))



вопрос только в том хватит ли размера nvarchar(MAX)?
2Гб?
...
Рейтинг: 0 / 0
Исправление поля image
    #39856270
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKПетрда вроде получается
вопрос только в том хватит ли размера nvarchar(MAX)?
2Гб?

да 2 хватит.

Возникла следующая проблема. Сейчас в БД часть данных неверных, часть верных. Поидее преобразование не должно повлиять на верные данные. Но это по факту не так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
select 
fblob,
s = convert(VARBINARY(MAX), fblob), 
s1 = convert(nvarchar(MAX), convert(VARBINARY(MAX), fblob)), 
s2 = convert(varchar(MAX), convert(nvarchar(MAX), convert(VARBINARY(MAX), fblob))), 
s3 = convert(varbinary(max), convert(varchar(MAX), convert(nvarchar(MAX), convert(VARBINARY(MAX), fblob)))),
s4 = convert(image, convert(varbinary(max), convert(varchar(MAX), convert(nvarchar(MAX), convert(VARBINARY(MAX), fblob)))))



результат
...
Рейтинг: 0 / 0
Исправление поля image
    #39856273
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полный результат
из-за чего это может быть?
...
Рейтинг: 0 / 0
Исправление поля image
    #39856299
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чо, не судьба проверить второй байт на 0 перед преобразованием?

ЗЫ. Можно ишо 3-й и 5-й байт проверить для вящей надежности...
...
Рейтинг: 0 / 0
Исправление поля image
    #39856349
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222Чо, не судьба проверить второй байт на 0 перед преобразованием?

ЗЫ. Можно ишо 3-й и 5-й байт проверить для вящей надежности...

и как мне считать второй байт в sql?
...
Рейтинг: 0 / 0
Исправление поля image
    #39856359
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петрaleks222Чо, не судьба проверить второй байт на 0 перед преобразованием?

ЗЫ. Можно ишо 3-й и 5-й байт проверить для вящей надежности...

и как мне считать второй байт в sql?
Вы не поверите, через SUBSTRING.

Код: sql
1.
2.
3.
4.
5.
declare
    @bin varbinary (100) = 0x4A0056004200450052006900300078004C006A0051004B004A0065004C006A007A0039004D004B004E

SELECT @bin
WHERE SUBSTRING(@bin, 2, 1) = 0x00 AND SUBSTRING(@bin, 4, 1) = 0x00
...
Рейтинг: 0 / 0
Исправление поля image
    #39856366
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinamotoПетрпропущено...


и как мне считать второй байт в sql?
Вы не поверите, через SUBSTRING.

Код: sql
1.
2.
3.
4.
5.
declare
    @bin varbinary (100) = 0x4A0056004200450052006900300078004C006A0051004B004A0065004C006A007A0039004D004B004E

SELECT @bin
WHERE SUBSTRING(@bin, 2, 1) = 0x00 AND SUBSTRING(@bin, 4, 1) = 0x00


Для надежности можно все четные байты проверить:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
CREATE TABLE #vb 
(
    c varbinary(100)
);

DECLARE
    @bin varbinary (100) = 0x4A0056004200450052006900300078004C006A0051004B004A0065004C006A007A0039004D004B004E

INSERT INTO #vb (c)
SELECT @bin 
UNION all
SELECT CAST ( cast (  cast( @bin as nvarchar (100) ) as varchar (100) ) as varbinary (100) )  


SELECT *
FROM #vb
WHERE 
    NOT EXISTS (
        SELECT 
            * 
        FROM 
            dbo.number
        WHERE 
            number < LEN(c) / 2 AND SUBSTRING(c, number * 2, 1) > 0x00
    )
...
Рейтинг: 0 / 0
Исправление поля image
    #39856380
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо всем за помощь.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Исправление поля image
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]