Chinaunix首页 | 论坛 | 博客
  • 博客访问: 209948
  • 博文数量: 21
  • 博客积分: 1546
  • 博客等级: 上尉
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-10 14:54
文章分类

全部博文(21)

文章存档

2020年(1)

2019年(3)

2015年(2)

2014年(1)

2011年(1)

2009年(7)

2008年(4)

2007年(2)

我的朋友

分类: Mysql/postgreSQL

2009-10-14 11:33:27

PostgreSQL的二进制数据类型为bytea,可最多保存2G的数据。在ADO、ODBC等接口,可通过带参数化的插入SQL语句上传二进制。
 
然而在某些接口、SQL语句无法进行参数绑定,或者某些语言没有二进制的类型,或者接口的不兼容等原因,常无法上传二进制数据。
 
碰到这种情况下,必须在客户端将二进制转化为一定规则的字符序列,然后插入语句时,来个显示转换
cast('字符序列' as bytea).
 
二进制转化为字符序列的规则:
分析每个字节,当其ASCII值在0到31,127到255,或为39、92,请将这字节转化为3位的八进制字符串,前面加上2个反斜杠,如chr(39)表示为\\. 其他ascii值为可显示字符,不变,当然你也可全部转化为八进制,但这样整个字符串太长,浪费空间。
 
如二进制序列 chr(0)+'a'+'b'+chr(233)+chr(25)+'c'转化为字符序列为:
\\
 
上传的时候再来个显示转换,如 insert into table1 (aa) values (cast('' as bytea))
 
如果二进制数据太大,可分次上传,用||连接符连接起来,如:
insert into table1 (id,aa) values (1,cast('序列1' as bytea))
update table1 set aa=aa||cast('序列2' as bytea) where id=1
...
 
 如果postgresql为9.0以上, 可用 hex格式, 字符串前面加0x
如chr(255)+chr(0)+chr(254) 可转化为 '0x FF00FE'
阅读(4009) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-11-07 23:53:59

Dim My_Stream As ADODB.Stream Set My_Stream = New ADODB.Stream My_Stream.Mode = adModeReadWrite My_Stream.Type = adTypeBinary My_Stream.Open My_Stream.LoadFromFile FileName pAdoRS.Fields("二进制字段").Value = My_Stream.Read My_Stream.Close

chinaunix网友2009-11-07 23:51:37

用ado,将连接字符串改为 "DRIVER={PostgreSQL Unicode};DATABASE=xxx;SERVER=xxx;PORT=5432;UID=xxx;PWD=xxx;ByteaAsLongVarBinary=1" 一定要加ByteaAsLongVarBinary=1