如何使用Node.js在MySQL中存储Buffer
?
我知道的一种方法是将Buffer
转换为十六进制字符串并将其保存为MySQL中的CHAR
类型。但是,在之前之前转换并在保存之后转换是最佳做法吗?
有没有一种方法可以直接保存并使用Node.js获取MySQL中的Buffer
(字节数组),例如,在MySQL中使用BLOB
?
或者实际上我使用的方式并不重要,它们之间的区别并不大?
答案 0 :(得分:2)
我不知道最佳做法。但我可以分享一下对我有用的东西。
如果我正在使用对象,我更喜欢在longtext
列中将它们存储为base64(以减少base16上的字符长度)并对其进行压缩。
我认为将它们存储为字符串更有帮助,因为如果将它们存储为缓冲区,那么我认为没有办法将它们从数据库中复制出来(有时候排除故障非常有用),并且他们回到你的对象 - 至少,我还没有办法做到这一点。
例如(假设Nodejs 6+用于Buffer.from()
语法,否则使用new Buffer()
):
const obj = {};
const zip = zlib.gzipSync(JSON.stringify(obj)).toString('base64');
并撤消:
const originalObj = JSON.parse(zlib.unzipSync(Buffer.from(zip, 'base64')));
由于longtext
等于~4GiB,除非你有大量的物体,否则你不应该达到极限。但是我认为你在别处有效率问题。
注意:显然有很多东西包含在那里(即zip,parse,buffer等)。
很多都可能在一行中失败。
因此,请确保妥善处理。