2017년 4월 26일 수요일

varbinary 뒤에 0 잘림 현상

이번에 작업하면서 이벤트 정보를 varbinary로 아래와 같이 저장하는데


declare @data varbinary(1024)

update event_binary
   set data = @data
 where id = @id


문제는 @data 값이 0x01020300d209000000  이런식인 경우
막상 저장되는 값은 0x01020300d209
이렇게 되는 것이다.

그래서 한동안 삽질하다가 커뮤니티에 물어보니


SET ANSI_PADDING ON 
https://msdn.microsoft.com/ko-kr/library/ms187403.aspx



답변을 받았다


테이블 생성할때 왜 아래와 같이 했는지 이해가 됐다


SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'tbl_event]'))
BEGIN
CREATE TABLE [dbo].[tbl_event](
[IDX] [int] NOT NULL,
[Custom] [varbinary](15) NULL,
 CONSTRAINT [PK_tbl_event] PRIMARY KEY CLUSTERED 
(
[IDX] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
END
GO


IF NOT EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID(N'[dbo].[tbl_event]') AND [name] = N'Data')
BEGIN
ALTER TABLE [dbo].[tbl_event] ADD [Data] [varbinary](1024) NULL
END
GO