一、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’

PostgreSQL数据库clob和blob pgsql blob_PostgreSql  

PostgreSQL数据库clob和blob pgsql blob_16进制_02

所以向数据库中插入“}”的时候使用“\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

PostgreSQL数据库clob和blob pgsql blob_进制_03

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

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

PostgreSQL数据库clob和blob pgsql blob_bytea  _04

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

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

PostgreSQL数据库clob和blob pgsql blob_PostgreSql  _05

本文属于自己一点总结,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进制的字符串

PostgreSQL数据库clob和blob pgsql blob_16进制 _06