You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node Sequelize操作MySQL:如何获取含布尔值的原始数据数组

解决Sequelize raw查询布尔字段返回Buffer的问题

方案1:修改模型字段的类型转换逻辑

在定义actif字段时,通过自定义get方法确保读取值时转换为布尔类型:

const YourModel = sequelize.define('YourModel', {
  actif: {
    type: DataTypes.BOOLEAN,
    allowNull: false,
    get() {
      const rawValue = this.getDataValue('actif');
      return rawValue === 1 || rawValue === true;
    }
  },
  // 其他字段定义
});

方案2:查询后手动映射转换

保持现有模型不变,查询获取原始数据后,遍历数组转换actif字段:

// 执行raw查询
const rawResults = await YourModel.findAll({
  raw: true,
  // 你的查询条件,比如where、attributes等
});

// 转换actif为布尔值
const formattedResults = rawResults.map(item => ({
  ...item,
  actif: item.actif instanceof Buffer ? item.actif[0] === 1 : item.actif === 1
}));

方案3:配置MySQL驱动自动转换

在Sequelize的连接配置中,添加typeCast逻辑,让驱动自动将tinyint(1)类型转换为布尔值:

const sequelize = new Sequelize('your_db', 'your_user', 'your_pwd', {
  dialect: 'mysql',
  dialectOptions: {
    typeCast: (field, next) => {
      // 检测tinyint(1)类型字段
      if (field.type === 'TINY' && field.length === 1) {
        return field.string() === '1';
      }
      return next();
    }
  },
  // 其他连接配置
});

内容的提问来源于stack exchange,提问作者dterencio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:45:19