Вставить значение шестнадцатеричной строки в поле изображения сервера sql добавляется дополнительно 0

Имейте поле изображения и хотите вставить в него из шестнадцатеричной строки:

insert into imageTable(imageField) 
values(convert(image, 0x3C3F78...))

однако при запуске select значение возвращает с дополнительным 0 как 0x03C3F78...

Этот дополнительный 0 вызывает проблему в другом приложении, я не хочу этого.

Как остановить добавление дополнительного 0?

Схема:

CREATE TABLE [dbo].[templates](
    [templateId] [int] IDENTITY(1,1) NOT NULL,
    [templateName] [nvarchar](50) NOT NULL,
    [templateBody] [image] NOT NULL,
    [templateType] [int] NULL)

и запрос:

insert into templates(templateName, templateBody, templateType) 
values('I love stackoverflow', convert(image, 0x3C3F786D6C2076657273696F6E3D.......), 2)

фактическая шестнадцатеричная строка достаточно велика для публикации здесь.

Ответ 1

У меня была аналогичная проблема, и я виню себя.

Возможно, что вы копируете только часть необходимых данных. В моем случае я добавил '0' в конец blob.

Причиной этого может быть копирование значения из SQL Management Studio в буфер обмена.


вставить в значения imageTable (imageField) (0x3C3F78... A)

Выберите возвращенный: 0x03C3F78...


Вставить в значения imageTable (imageField) (0x3C3F78... A 0)

Выберите возвращенный: 0x3C3F78...


Надеюсь, это поможет.

С наилучшими пожеланиями.

Ответ 2

Это правильно для 0x0: каждая пара цифр составляет один байт, поэтому 0x00 имеет значение, сохраненное

Когда я запускаю SELECT convert(varbinary(max), 0x55), я получаю 0x55 на SQL Server 2008. SELECT convert(varbinary(max), 85) дает мне 0x00000055, который является правильным, это 85 - это 32-битное целое число

Какой тип данных вы используете для varbinary?

Изменить: я все еще не могу воспроизвести, используя изображение не varbinary

Некоторые вопросы:

  • это обновленная база данных? Что такое уровень совместимости?
  • зачем использовать изображение: вместо этого используйте varbinary (max)
  • что происходит, когда вы меняете все на varbinary?