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

使用MariaDB C++ Connector插入DateTime数据时传入NULL问题求助

这问题我之前帮同事排查过,核心是两个点:MYSQL_TIME结构体的必填字段没初始化,还有bind参数的buffer赋值错了,导致连接器没法正确解析你的时间数据。

问题1:MYSQL_TIME的必填字段未初始化

当你使用MYSQL_TYPE_DATETIME类型时,MariaDB的C连接器会严格校验MYSQL_TIME里的所有时间字段——包括秒(second)和微秒(second_part)。你现在只初始化了年、月、日、时、分,剩下的字段是随机的垃圾值,连接器会判定这个时间无效,直接插入NULL。而MYSQL_TYPE_DATE只校验年月日,所以你能正常插入日期部分。

问题2:bind的buffer赋值错误

你把一个MYSQL_TIME*数组的地址传给了bind[1].buffer,但单条插入的场景下,buffer应该直接指向你的ts变量本身,而不是指针数组。指针数组是批量插入多条数据时才需要用到的配置。

修正后的代码片段

MYSQL_TIME ts;
// 初始化所有必填的时间字段,缺一个都可能被判无效
ts.year = 2020;
ts.month = 3;
ts.day = 19;
ts.hour = 8;
ts.minute = 5;
ts.second = 0;          // 必须初始化秒,哪怕设为0
ts.second_part = 0;     // 不需要微秒就设为0
ts.neg = 0;             // 表示时间为正(非公元前/负时间)

// 修正bind参数配置
bind[1].buffer = &ts;                           // 直接指向MYSQL_TIME变量
bind[1].buffer_type = MYSQL_TYPE_DATETIME;
bind[1].u.indicator = &STMT_INDICATOR_NTS;      // 单个参数用指针指向指示器更清晰

如果是批量插入场景,你才需要用数组存放多个MYSQL_TIME实例,同时设置bind[1].row_count为插入行数。但从你的代码逻辑来看,单条插入的修改就足够解决问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:42:49