如何向PostgreSQL的bytea类型列插入JSON数据?遇invalid input报错如何解决
问题原因
你直接向bytea类型的列传入普通JSON字符串,PostgreSQL不会自动将文本类型隐式转换为二进制bytea格式,因此触发输入语法错误。
解决方案
你需要对插入的JSON字符串做显式的二进制转换,常用方法如下:
方法1:使用convert_to函数(最常用)
插入时通过内置函数按指定编码将文本转为bytea,示例代码:
INSERT INTO datamine VALUES('DUMMY', 2100, convert_to('{"serviceId":"Y","continuedService":"E345"}', 'UTF8'));
读取数据时用对应的convert_from函数将二进制转回文本即可:
SELECT ine, essaykey, convert_from(JSONDATA, 'UTF8') AS json_content FROM datamine;
方法2:应用代码层直接传入字节流
如果是通过应用程序写入数据,直接把JSON序列化后的字节流作为参数绑定到SQL的bytea字段即可,不同语言的PostgreSQL驱动都原生支持字节类型和bytea的映射,无需额外在SQL中做转换。
注意事项
- 插入和读取时使用的字符编码必须一致,否则会出现乱码问题,优先统一使用UTF8编码
- 不要直接对bytea字段做字符串匹配之类的文本操作,需要先转成文本类型再处理
内容的提问来源于stack exchange,提问作者Upender Bikkumalla
相关产品推荐
相关产品推荐

