问题Update multiple rows in same query using PostgreSQL Roman Peckar给出了类似的答案;为了我的问题,我修改了它:
update test as t set
column_a = c.column_a,
column_b = c.column_b
from (values
('123', bytea1),
('345', bytea2)
) as c(column_a, column_b)
where c.column_a = t.column_a;
在我的情况下,表测试有一个bytea类型的列,比如column_b。但是,这不起作用,因为c.column_b属于文本类型,因此产生错误,表示没有从文本到bytea的转换以及提示使用强制转换。好吧,使用强制转换也没有帮助,因为关于编码引用LATIN编码的另一个错误。我为错误的错误报告道歉,但我目前无法访问执行此项工作的计算机。
似乎c.column_b的默认类型是文本。不能在'as'子句中指定列的类型,'作为c(column_a,column_b type bytea)'或以其他方式?如果不是,我认为我必须使用一些二进制字符串函数,这似乎有点不优,至少可以说。
答案 0 :(得分:1)
因为text
类型用于文本。它需要在您的客户端编码中使用正确编码的文本,并且可以在服务器编码中保存而不会丢失数据(例如,latin1
没有“
或€
,因为这样的字符可以不能使用此编码保存。)
因此,如果您需要保存文本,其中包含latin1
以外的字符(就像输入到网络表单中的任何内容一样),您需要将数据库编码更改为utf-8
。或者,作为最后的手段,请使用encode(data,'base64')
。