Вставить значение шестнадцатеричной строки в поле изображения сервера 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?