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

如何使用mysql2向MySQL数据库正确插入日期类型数据?

问题原因

MySQL的DATE类型字段默认仅识别YYYY-MM-DD格式的字符串,你传入的06-08-2022不符合格式要求,因此触发日期值错误。
另外你原有SQL的占位符写法存在问题:VALUES ?是批量插入专用语法,要求传入二维数组类型的参数,单条插入需要为每个字段单独配置?占位符,并用括号包裹占位符列表。

可行解决方案

任选以下一种方案即可修复问题:

  • 方案1:在SQL中通过STR_TO_DATE函数转换
    直接调用MySQL内置的日期转换函数,按照传入日期字符串的实际格式指定匹配规则即可,示例代码:

    .query(
      // 格式符说明:%d=两位日、%m=两位月、%Y=四位年
      // 如果你的06-08-2022是「月-日-年」格式,将格式串改为'%m-%d-%Y'即可
      "INSERT INTO expenses (expense_date, expense_value, user_id) VALUES (STR_TO_DATE(?, '%d-%m-%Y'), ?, ?)",
      ["06-08-2022", 11.33, 2],
      true
    )
    
  • 方案2:在Node.js侧预先转换为兼容格式
    先在业务代码里把日期字符串处理为MySQL默认支持的YYYY-MM-DD格式,再传入查询语句,不需要额外修改SQL逻辑,示例代码:

    const rawDate = "06-08-2022";
    // 以下为「日-月-年」格式的分割逻辑,若为「月-日-年」请调整分割后变量的拼接顺序
    const [day, month, year] = rawDate.split('-');
    const formattedDate = `${year}-${month}-${day}`; // 转换后结果为2022-08-06
    
    .query(
      "INSERT INTO expenses (expense_date, expense_value, user_id) VALUES (?, ?, ?)",
      [formattedDate, 11.33, 2],
      true
    )
    

补充说明:如果user_id字段为数值类型,直接传数字2即可,不需要传字符串"2",可以避免数据库隐式类型转换的额外开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:15:34