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英文文档没有看太明白,有兴趣可以看看原因文参考
使用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进制的字符串