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

C#读取MySQL datetime(3)字段时时间戳被截断?求原因

问题原因与解决方法

核心原因

你遇到的毫秒截断问题,本质不是C#代码没读取到毫秒,而是默认的ToString()方法不会输出DateTime对象的毫秒部分。MySQL的datetime(3)字段存储的毫秒信息已经被正确读取到了C#的DateTime对象中,但无参数的ToString()使用的是默认格式("G"通用格式),只会显示到秒级。

验证方式

你可以在代码里加一行调试代码,确认DateTime对象确实包含毫秒:

if (reader.Read())
{
    DateTime loggedAt = reader.GetDateTime(0);
    Console.WriteLine(loggedAt.Millisecond); // 会输出508,证明毫秒已读取
}

解决方法

只需要在输出时指定包含毫秒的格式字符串即可:

方法1:直接格式化输出

修改输出代码为:

if (reader.Read())
{
    Console.WriteLine(reader.GetDateTime(0).ToString("yyyy-MM-dd HH:mm:ss.fff"));
}

方法2:使用字符串插值格式化

如果需要更灵活的格式,也可以先获取DateTime对象再格式化:

if (reader.Read())
{
    DateTime loggedAt = (DateTime)reader["logged_at"];
    Console.WriteLine($"{loggedAt:yyyy-MM-dd HH:mm:ss.fff}");
}

额外注意

如果使用的是较旧的MySQL驱动(如MySQL.Data),确保驱动版本支持datetime(n)类型的毫秒读取,但目前主流驱动(包括MySqlConnector)都能正确处理这类字段,核心问题还是输出格式的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:47:04