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

如何在MySQL数据库中插入带AM/PM标识的时间格式?

嘿,这个问题我碰到过好多次,咱们一步步把它理清楚:

问题出在哪?

首先得明确:MySQL的timestamp类型根本不存储你看到的那种带AM/PM的格式化字符串。它本质上是存的UTC时间戳(从1970年元旦零点开始算的秒数)。当你插入2018-05-16 10:28 PM的时候,MySQL会先把这个字符串解析成对应的时间戳数值存起来;等你查询的时候,它又会默认把这个数值转换成YYYY-MM-DD HH:MM:SS的标准格式返回——这就是为啥你看不到AM/PM的原因。

怎么解决?

根据你的需求,有几种靠谱的处理方式:

1. 用datetime类型+查询格式化(推荐)

如果你不需要timestamp的自动时区转换特性,可以把字段类型改成datetime。然后查询的时候,用MySQL的DATE_FORMAT函数指定输出格式:

SELECT DATE_FORMAT(phoneinterview, '%Y-%m-%d %h:%i %p') AS formatted_phoneinterview FROM your_table_name;

这样查出来的结果就是你想要的2018-05-16 10:28 PM格式了。

2. 应用层处理(最佳实践)

其实更推荐的做法是:数据库依然用timestamp或datetime存原始时间值,在你的应用代码里把查询到的时间格式化成带AM/PM的样式。这样既保留了时间类型的所有优势(比如排序、时间运算、时区转换),又能满足显示需求。

举个PHP的例子:

// 假设从数据库查到的时间是$db_time
$formatted_time = date('Y-m-d h:i A', strtotime($db_time));
echo $formatted_time; // 输出 2018-05-16 10:28 PM

其他语言比如Python、Java也都有对应的时间格式化方法,原理是一样的。

3. 直接存字符串(不推荐)

如果实在要把2018-05-16 10:28 PM原封不动存成字符串,可以把字段改成varchar(20)。但这种方式的弊端很大:你没法对这个字段做时间排序、加减天数、范围查询等操作,完全浪费了数据库时间类型的功能,只适合完全不需要时间运算的极端场景。

总结一下

数据库的时间类型是用来存储和运算时间值的,不是用来存格式化后的字符串的。所以最优解要么是在查询时用DATE_FORMAT格式化,要么是在应用层处理显示格式——尽量别直接存字符串哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:53:42