varchar2中最大字符数是4000如果不是因为这个,那我也不知道
等待高手!

解决方案 »

  1.   

    你如果用raw 的话,你就不用转换,直接存放二进制!
      

  2.   

    字符数组不是以\0结束吗?怎么是00呢?我是从二进制文件中按指定的字节数读取数据放入buf中的,然后将buf发送给软件写入数据库表中,改怎么处理啊?外部程序怎么处理啊,外部打印显示的内容都是对的,就是写入时截断,用raw类型存储也报错,不会只能用blob吧,那我就惨了!!!!希望大家多帮忙啊!!!
      

  3.   

    to  52768361(涵清V3.0):能存,就是只要以遇见00就截断数组
      

  4.   

    如果使用VARCHAR2来存储你buf中的报文,可以逐个字节转换成字符,然后再插入到字段当中。不过,这样一个字节,就变成两个字符了。取值时,每两个字符,再还原成一个字节即可。
    举例来说,
        报文:12 34 23 4D 00 01 02 34 
        想办法存到数据库的varchar2中,变成'1234234D00010234'。
    入库前,实现函数byte2char(unsigned char* buf, int len, char* str);其实,buf为报文的字节表示,str为两倍于len的字符串空间用于存放字符串表示的buf.
    提取值时,将字段值,再转换成字节流的形式。要实现char2byte(char* str, int len, unsigned char* buf),两个字符一解析,直到解析完毕。
      希望我说的足够清晰。
      

  5.   

    to iihero(阿黑哥):好像听清楚了,就是在存入数据库表之前将二进制数组转换成对应的字符串,原本20个字节的二进制数组变成40个字节的字符串是吧,然后用数据库数据时再将40个字节的字符串还原成20个字节的二进制数组,请问一下这两个函数是不是不是oracle自带的而需要自己编写代码啊?我不是很清楚函数内部应该如何处理啊,能不能麻烦你再讲清楚一点或者写几行关键代码啊,谢谢你!!!!
    难道这个问题是oracle数据库的bug?????不至于吧,有没有别的解决办法呢?期待中!!!!!!