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

Flutter同步数据至MySQL时DateTime日期字段为空问题

日期字段同步为空解决步骤

按以下顺序逐一排查,覆盖99%同类问题:

  • 先校验本地时间戳合法性
    在构造请求参数前加打印日志,确认本地存的时间戳是合法值:
    // 加在created_at赋值前
    final rawTs = clientList[i].createdAt;
    print('原始时间戳值:$rawTs,类型:${rawTs.runtimeType}');
    final parsedTime = DateTime.fromMillisecondsSinceEpoch(rawTs);
    print('转换后时间:$parsedTime,ISO输出:${parsedTime.toIso8601String()}');
    
    正常13位毫秒时间戳对应近年时间的取值范围在1577808000000(2020年)到1893456000000(2030年)之间,如果打印出来时间戳是字符串、是10位秒级值、是0/空值,转换出来的时间会是1970年、无效日期这类异常值,后端解析失败就会写入空值,这种情况先修复SQLite存储时间戳的逻辑,确保存的是int类型的13位毫秒值。
  • 调整时间传参格式适配后端解析
    你当前传的ISO8601格式是YYYY-MM-DDTHH:mm:ss.sss带T分隔符、带毫秒的结构,绝大多数后端框架默认配置不识别这种格式,会直接把created_at字段解析为null,最终写入数据库为空。
    兼容性最高的传法是直接传MySQL原生支持的YYYY-MM-DD HH:mm:ss格式字符串,不用改后端配置就能识别:
    "created_at": parsedTime.toString().substring(0, 19),
    
    这行代码输出的时间格式类似2024-05-20 14:30:22,和MySQL的DATETIME类型完全匹配。
  • 核对后端与数据库配置
    1. 先抓包确认发出的POST请求体里created_at字段值正常,如果请求体里值没问题,问题和Flutter端无关,去查后端接口的字段映射:确认后端接口的created_at字段没有被标记为忽略、没有类型绑定错误。
    2. MySQL中created_at字段用DATETIME类型即可,不要用TIMESTAMP类型做测试,同时确认字段没有设置NOT NULL约束但无默认值的冲突,避免解析失败时触发隐式赋值导致空值。

注意:你贴的代码里htpp.post存在拼写错误,正常应为http.post,如果其他字段能正常同步说明是贴代码时的笔误,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:18:17