PostgreSql MySQL数据库中插入或读取blob 、bytea 数据

一、PostgreSql

PostgreSql 中bytea 数据类型是二进制数据,可以用来存储图片或者其他的大文件格式,当bytea数据类型中存储少量字节的时候可以通过SQL语句进行CRUD 

数据库中的bytea是使用二进制进行按照字节存储

参考:https://www.postgresql.org/docs/9.2/static/datatype-binary.html

https://www.yiibai.com/manual/postgresql/datatype-binary.html   这里面的"\"写成了"/" 

写入数据:

要向数据中写入一个字节的数据,应该使用该字节的8进制进行写入

如:“}”的ASCII码为“125(10进制)” 对应的8进制为“175” 

注意:如果10进制转换为8进制没有三位的应该在前面补0

如:“=”的ASCII码为“61”对对应的8进制为“75” 应该写成‘\075’ 而不是‘\75’

所以向数据库中插入“}”的时候使用“\175” 在插入的时候每一个直接使用斜杠“\”隔开

update dj_data SET data_content='\175\175'::bytea where terminal_id='321'; 

如这样就设置值为了“}}”

 

如果不使用斜杠“\”表明里面的内容全部按照字符进行插入

如update dj_data SET data_content='175175'::bytea where terminal_id='321';实际上是设置值为字符的175175

在读取值的时候也是使用可以使用encode('字段','hex')将其显示转换成16进制的字符串进行查看

select encode(data_content,'hex'),data_content from dj_data where terminal_id='321';

如前面更新的值转换成16进制查看为7d7d,“16进制7d”为“10进制125”为“8进制175”为“字符}”

在Navicat中可以使用如下来查看bytea对饮的具体的字符串

本文属于自己一点总结,https://www.postgresql.org/docs/9.2/static/datatype-binary.html英文文档没有看太明白,有兴趣可以看看原因文参考

二、Mysql

使用unhex()函数将一对16进制的数转换为字符,应该说是转换为一个字节

使用hex()函数将一个字节转换为16进制的字符串

注意:上面说转为一个字节因为10进制的  0 到 31 以及 127 到 255是不可打印的,不能转换为字符,但在数据库中也能进行存储,因此使用字节而不是字符

如:“}”的ASCII码为“125(10进制)” 对应的16进制为“7d”

 UPDATE dj_data set data_content=unhex('7d')  where  terminal_id   = '123'; 

使用上面语句修改值为“}”

 UPDATE dj_data set data_content=unhex('7d7d')  where  terminal_id   = '123'; 

使用上面语句修改值为“}}”

注意:由于在unhex()里面没有明确区分字符的符号,因此每一个字节必须保证为两位确保能够正确解析成16进制

 UPDATE dj_data set data_content=unhex('44')  where  terminal_id   = '123'; 得到结果是 D 对应10进制AscII码为68

 UPDATE dj_data set data_content=unhex('0404')  where  terminal_id   = '123'; 得到结果是 对应10进制AscII码为4的两个字符

使用 hex()读取BLOB格式转为16进制的字符串

 

 

 

 

 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值