如何将 Postgres bytea 转换为 base64 字符串
How to convert Postgres bytea to base64 string
我有一个 base64 图像,我正试图将其保存在 Postgres 数据库中(使用 Hasura)。该字段的类型为 bytea
我不确定如何将此数据保存到该字段。
我尝试将 data:image/png;base64,sisodjodo...
传递给该字段,它像这样保存:\x6956424f5277304b47676f414141414...
当我取回它时,它似乎并没有以与保存时相同的方式返回。
// Query the database and save resulting object
const user = {
avatar: '\x6956424f5277304b47676f414141414...'
}
user.avatar = btoa(user.avatar);
console.log(user.avatar);
// Prints: XHg2OTU2NDI0ZjUyNzczMDRiNDc2NzZmNDE0MTQxNDE0Z...
Postgres bytea
字段必须以两种格式之一输入,最简单的格式是 hex。这种格式看起来像 \x[your byte string in hex]
因此,假设您有一个名为 things
的 table 和一个 bytea
列 field
,您可以使用字节字符串 010101
插入一个新行] 像这样:
mutation {
insert_things_one(object: {
field: "\x010101"
}) {
field
}
}
结果将是:
{
"data": {
"insert_thing_one": {
"field": "\x010101"
}
}
}
注意在 GraphQL 中你必须转义 \
。您可以在 SQL 中验证它是否正确存储:
> select * from things;
field
\x010101
如果你想根据你的问题存储一个 base64 编码的字节字符串,你需要去掉前导 data:image/png;base64,
然后用你使用的任何语言将 base64 字符串编码为十六进制。在 JS 中:
PS。我不建议使用文本字段来存储 base64 编码的字符串。这将使您花费比必要更多的存储空间。根据我上面的回答,只是 re-encode 到十六进制。
我有一个 base64 图像,我正试图将其保存在 Postgres 数据库中(使用 Hasura)。该字段的类型为 bytea
我不确定如何将此数据保存到该字段。
我尝试将 data:image/png;base64,sisodjodo...
传递给该字段,它像这样保存:\x6956424f5277304b47676f414141414...
当我取回它时,它似乎并没有以与保存时相同的方式返回。
// Query the database and save resulting object
const user = {
avatar: '\x6956424f5277304b47676f414141414...'
}
user.avatar = btoa(user.avatar);
console.log(user.avatar);
// Prints: XHg2OTU2NDI0ZjUyNzczMDRiNDc2NzZmNDE0MTQxNDE0Z...
Postgres bytea
字段必须以两种格式之一输入,最简单的格式是 hex。这种格式看起来像 \x[your byte string in hex]
因此,假设您有一个名为 things
的 table 和一个 bytea
列 field
,您可以使用字节字符串 010101
插入一个新行] 像这样:
mutation {
insert_things_one(object: {
field: "\x010101"
}) {
field
}
}
结果将是:
{
"data": {
"insert_thing_one": {
"field": "\x010101"
}
}
}
注意在 GraphQL 中你必须转义 \
。您可以在 SQL 中验证它是否正确存储:
> select * from things;
field
\x010101
如果你想根据你的问题存储一个 base64 编码的字节字符串,你需要去掉前导 data:image/png;base64,
然后用你使用的任何语言将 base64 字符串编码为十六进制。在 JS 中:
PS。我不建议使用文本字段来存储 base64 编码的字符串。这将使您花费比必要更多的存储空间。根据我上面的回答,只是 re-encode 到十六进制。