如何使用Node.js在MySQL中存储Buffer
?
我知道的一种方法是将 Buffer
转换为 hex string 并将其保存为 MySQL 中的 CHAR
类型。但是在 MySQL 中保存之前和之后转换是最佳实践吗?
有没有一种方法可以直接用Node.js在MySQL中保存和获取Buffer
(字节数组),比如在MySQL中使用BLOB
?
或者实际上我使用什么样的方式并不重要,它们差别不大?
最佳答案
我不知道最佳做法。但我可以分享对我有用的东西。
如果我正在处理对象,我更喜欢将它们存储为 base64(以减少 base16 的字符长度)在 longtext
列中并压缩它们。
我认为将它们存储为字符串更有帮助,因为如果将它们存储为缓冲区,那么我认为没有办法将它们从数据库中复制出来(有时这对故障排除很有帮助),然后翻译他们回到你的对象 - 至少,我还没有找到一种方法来做到这一点。
例如(假设 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 等)。
很多东西都可能在那一行中失败。
所以一定要妥善处理。
关于mysql - 在 MySQL 中存储 Node.js 缓冲区的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47320613/