插入
insert into [dbo].[t_binary]([key], [binarychr]) values('003', 0x1189)
查询
select [key],CONVERT(binary(10), [binarychr]) from [t_binary]
结果
003 0x11202020202020202020为什么插入0x1189,结果变成0x1120了?
其中:binarychr char(10)

解决方案 »

  1.   

    因为做了类型转换。
    create table t_binary([key] char(10), [binarychr] char(10))insert into [dbo].[t_binary]([key], [binarychr]) values('003', 0x1189)select [key],CONVERT(binary(10), [binarychr]) from [t_binary]
    /*
    003        0x11202020202020202020
    */
    create table t_binary1([key] char(10), [binarychr] binary(2))insert into [dbo].[t_binary1]([key], [binarychr]) values('003', 0x1189)select [key],[binarychr] from [t_binary1]
    /*
    key        binarychr
    ---------- ---------
    003        0x1189
    */
      

  2.   

     0x1189 插入char型 有保持不变的办法吗?
      

  3.   

    直接把0x1189当字符按插入就不变了。当数据从字符串数据类型(char、varchar、nchar、nvarchar、binary、varbinary、text、ntext 或 image)转换为不同长度的 binary 或 varbinary 数据类型时,SQL Server 将在数据的右侧填充或截断数据。 
    从其他数据类型转换为 binary 或 varbinary 时,将在数据的左侧填充或截断数据。 
    填充将通过使用十六进制的零来完成。
      

  4.   

    你参考一下官方说明吧:
    http://technet.microsoft.com/zh-cn/library/ms188362.aspx
      

  5.   


    if OBJECT_ID('t_binary','u') is not null drop table t_binary
    go
    create table t_binary([key] char(10), [binarychr] char(10))insert into [dbo].[t_binary]([key], [binarychr]) 
    --插入数据时,做下转换
    select'003',convert(varchar(10),'0x1189')
    select [key], [binarychr] from [t_binary]
    /*
    (1 row(s) affected)
    key        binarychr
    ---------- ----------
    003        0x1189    (1 row(s) affected)
    */
      

  6.   

     不是要插入一个字符串‘0x1189’,而就是插入binary 0x1189,不过好像确实不行啊。