如何使用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
相关产品推荐
相关产品推荐

