你要么用text:
CREATE TABLE images (
name varchar,
base64data text
);
INSERT INTO image(name, base64data)
VALUES ('image1','base64imagedata in string type')
对于varchar,您需要预先确定大小。至少使用text,它可以省去您提前确定存储base64 图像的最大大小的麻烦。我认为text 的限制仍然是 1GB,即使您也可以称其为限制。
或者你用bytea:
CREATE TABLE images (
name varchar,
base64data bytea
);
INSERT INTO image(name, base64data)
VALUES ('image1', decode('base64imagedata in string type', 'base64'))
最好使用反映实际数据类型的数据类型。对于图像,它不是一个 ASCII / Unicode 字符序列,一个字符串 / varchar / 文本。相反,它是从 0 到 255 的所有可能值的序列,一个字节数组。 bytea 数据类型是图像的正确数据类型。
顺便说一句,最好不要将base64传输到数据库。除了节省带宽外,它还使数据库免于执行解码。相反,在应用程序端将 base64 转换为字节数组。这取决于您的数据访问层或 ORM。
这是 Sequelize(nodejs 应用程序)上的一个:PostgreSQL - How to insert Base64 images strings into a BYTEA column?
Sequelize.BLOB('tiny')
事实上,如果您的图像已经来自字节数组。您甚至不需要将其转换为 base64 并将其解码回 Postgres。您只需将字节数组传递给数据访问层即可。 .NET 中的示例:https://docs.huihoo.com/enterprisedb/8.1/dotnet-usingbytea.html
这样可以在传输图像时节省网络带宽。 base64 数据表示比原始字节数组大,它也为数据库节省了一些工作。将部分工作卸载到应用层