Node.js中如何将MySQL返回的BLOB类型数据转换为字符串或文本
Node.js场景下MySQL BLOB数据转可读文本最简实现
方案1:驱动层全局自动转换(推荐,一劳永逸)
Node.js生态常用的mysql、mysql2驱动都内置类型转换能力,在初始化数据库连接时增加对应配置,所有查询返回的BLOB字段会自动转为可直接使用的字符串,无需逐字段处理:
const mysql = require('mysql2/promise'); // 创建连接时增加typeCast配置 const conn = await mysql.createConnection({ host: '数据库地址', user: '账号', password: '密码', database: '库名', typeCast: (field, next) => { // 识别BLOB类型字段,自动按utf8编码转字符串 if (field.type === 'BLOB') return field.string('utf8'); return next(); } }); // 后续所有查询拿到的博客内容字段直接就是字符串,可直接使用 const [rows] = await conn.query('SELECT blog_content FROM posts WHERE id = 1'); console.log(rows[0].blog_content); // 直接输出可读的博客文本
方案2:单条数据手动转换(应急场景使用)
如果不想修改全局连接配置,查询拿到BLOB原始数据(本质是Node.js原生Buffer类型)后,直接调用内置toString方法即可转换,无需安装任何第三方依赖:
const [rows] = await conn.query('SELECT blog_content FROM posts WHERE id = 1'); // 对BLOB字段手动转utf8字符串 const readableContent = rows[0].blog_content.toString('utf8');
注意:如果存储博客内容时使用了非utf8编码(如gbk),将上述代码中的
utf8替换为对应编码即可,99%的业务场景使用utf8编码不会出现乱码。
原理说明
MySQL驱动默认不会对BLOB类型的二进制数据做编码解析,会直接返回原始Buffer对象,以上两种方式都是驱动原生支持的能力,是实现该需求成本最低的方案。
内容的提问来源于stack exchange,提问作者user19177691
相关产品推荐
相关产品推荐

