00 是需要转义的,select出来的blob数据默认就转成了字符"梯", 
因为你插入的二进制数据就是这个汉字的内码,
所以屏幕上显示的当然就是汉字了,
如果你想要看到二进制值,
那你就要进行数值转换,
将二进制值转成ASCII码显示的数值了,

解决方案 »

  1.   

    00如何转义呢?插入0xCCDD00CCDD的sql如何写?
    如果我用mysql的API插入,那岂非得把每个字节都拆开来判断啊?
      

  2.   

    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=16556
      

  3.   

    mysql> UPDATE tbl_name
               SET blob_column=LOAD_FILE("/tmp/picture")
               WHERE id=1;运行 LOAD_FILE 的要求:
    1:
    文件必须在服务器上,
    2:
    引用时必须用完全路径
    3:
    你必须有 FILE 权限
    4:
    读取的文件大小必须小于 max_allowed_packet
      

  4.   

    恩,先谢谢,再请帮忙分析一个我这种情况:
    我的blob数据不是从文件得到,是自己用uint8数组构造的,
    在程序中将组装sql语句,所以,我希望能象mssql一样使用如下的sql形式:
    update tbl_name set blob_column=0xCCDD00CCDD;
    如前述该语句是不成功的,改为如下语句也会被截断:
    update tbl_name set blob_column='CCDD\0CCDD';
    关键的问题是想知道sql如何写.
      

  5.   

    update sql set sql = '\cc\dd\0\cc\dd'你可以使用  MySQL-Front 来查看所插入的数据
      

  6.   

    呵呵,
    也胡了,
    如果你想插入一个十六进制数0xCCDD00CCDD
    update tbl_name set blob_column=0xCCDD00CCDD;
    是完全可以的,如果想以
    update tbl_name set blob_column='CCDD\0CCDD';
    方式,
    必须使用
    update sql set sql = '梯\0梯'因为0xCCDD 是汉字“梯”
    而\0为转义 00
      

  7.   

    如果你想要把二进制数据插入到一个BLOB列,下列字符必须由转义序列表示:    
     
    NUL    
    ASCII  0。你应该用'\0'(一个反斜线和一个ASCII  '0')表示它。    
    \    
    ASCII  92,反斜线。用'\\'表示。  
    '    
    ASCII  39,单引号。用“\'”表示。    
    "    
    ASCII  34,双引号。用“\"”表示。
      

  8.   

    恩,我刚才是弄错了,0xCCDD00CCDD方式k可以,
    只是我一直未能正确读出来:(
    不过,在mysql的API里,读到\0已经是字符串结束标志了, 
    如何获得不被截断的二进制串呢?