【问题标题】:Best practice on storing Node.js Buffer in MySQL在 MySQL 中存储 Node.js Buffer 的最佳实践
【发布时间】:2018-04-29 10:58:54
【问题描述】:
如何使用 Node.js 在 MySQL 中存储 Buffer?
我知道的一种方法是将Buffer 转换为十六进制字符串 并将其保存为CHAR 在MySQL 中的类型。但是在 MySQL 中转换 before 和 after 保存是最佳实践吗?
有没有办法可以直接用Node.js在MySQL中保存和获取Buffer(字节数组),比如在MySQL中使用BLOB?
或者实际上我使用哪种方式并不重要,它们并没有太大区别?
【问题讨论】:
标签:
mysql
node.js
sequelize.js
【解决方案1】:
我不知道最佳做法。但我可以分享对我有用的东西。
如果我正在处理对象,我更喜欢将它们存储为 base64(以减少 base16 上的字符长度)在 longtext 列中并压缩它们。
我认为将它们存储为字符串更有帮助,因为如果将它们存储为缓冲区,那么我认为没有办法将它们从数据库中复制出来(有时这对故障排除很有帮助),并翻译他们回到你的对象 - 至少,我还没有找到办法。
例如(假设Buffer.from()语法的Nodejs 6+,否则使用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、解析、缓冲区等)。
这一行可能会失败很多。
所以一定要妥善处理。