gpt4 book ai didi

sql - 使用 Postgres 8.4 中的映射表更新同一查询中的多行

转载 作者:行者123 更新时间:2023-11-29 13:32:50 25 4
gpt4 key购买 nike

有问题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”子句中指定为“as c(column_a, column_b type bytea)”或其他方式吗?如果不是,我想我必须求助于一些二进制字符串函数,至少可以说这似乎有点不雅。

最佳答案

因为 text 类型用于文本。它需要在您的客户端编码中正确编码的文本,并且可以在您的服务器编码中保存而不会丢失数据(例如,在 latin1 中没有 ,因为使用此编码无法保存此类字符)。

因此,如果您需要保存文本,其中可能包含 latin1 之外的字符(就像输入到 Web 表单的任何内容),您需要将数据库编码更改为 utf-8。或者,作为最后的手段,使用 encode(data,'base64')

关于sql - 使用 Postgres 8.4 中的映射表更新同一查询中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19741570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com