我已经使用base64-img模块将jpg图像转换为base64img格式,即base64img数据以varchar数据类型存储到postgres。
我可以存储未经转换的图像数据吗?
我正在使用以下查询存储varchar数据。
create table:
CREATE TABLE images (
name varchar,
base64data varchar
);
insert values:
INSERT INTO image(name,base64data) VALUES ('image1','base64imagedata in string type');
答案 0 :(得分:0)
您以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 / text的序列。相反,它是一个从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数据表示形式大于原始字节数组,它也为数据库节省了一些工作。将一些工作卸载到应用程序层