irpas技术客

MySQL 日期时间类型精确到毫秒_宝哥66_mysql时间精确到毫秒

网络 560

????????MySQL 常用的日期时间类型常用的是datetime、timestamp。其中datetime占用5个字节(有些文档中说占用8个字节是不对的,默认也不会保存毫秒)。 ???????

????????DATETIME和TIMESTAMP两种数据类型,至于怎么选择需要看业务需求,其中DATETIME占用字节较多,但表示范围较大。TIMESTAMP不能用于分区列,因为这种数据类型受时区限制,会受数据库时区的影响。

?????????创建表时使用sql,因为有需求保存时间需要精确到毫秒值,官网给出解释:MySQL has fractional seconds support for?TIME,?DATETIME, and?TIMESTAMP?values, with up to microseconds (6 digits) precision: 意思是三种类型都支持小数秒,就是我们平常说的毫秒。因为timestamp占用字节较少,所以选用TIMESTAMP数据类型。

CREATE TABLE `s_schedule_log` ( `log_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'log主健', `job_id` int(11) DEFAULT NULL COMMENT '任务id', `job_name` varchar(100) DEFAULT NULL COMMENT '任务名称', `execute_result` varchar(10) DEFAULT NULL COMMENT '执行结果。字典EXECUTE_RESULT', `result_info` varchar(255) DEFAULT NULL COMMENT '执行结果信息', `start_time` TIMESTAMP NULL DEFAULT NULL COMMENT '开始时间', `end_time` TIMESTAMP NULL DEFAULT NULL COMMENT '结束时间', `error_msg` varchar(255) DEFAULT NULL COMMENT '执行失败时的错误信息', PRIMARY KEY (`log_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='定时任务执行日志'

? ? ? ? 实际运行时发现并未保存毫秒值,运行截图以及数据截图如下???

? ? ? ? 从图中可以看出代码插入更新时都已经携带毫秒部分,当时数据库中并未保存,查询官网发文:To define a column that includes a fractional seconds part, use the syntax?type_name(fsp), where?type_name?is?TIME,?DATETIME, or?TIMESTAMP, and?fsp?is the fractional seconds precision. For example:

CREATE TABLE t1 (t TIME(3), dt DATETIME(6));

?????????The?fsp?value, if given, must be in the range 0 to 6. A value of 0 signifies that there is no fractional part. If omitted, the default precision is 0. (This differs from the standard SQL default of 6, for compatibility with previous MySQL versions.)

? ? ? ? 意思就是,毫秒部分需要以参数形式传参给数据类型,默认是不保存毫秒的,可以保存1-6位。如果需要保存三位的毫秒值,数据类型可以定义为DATETIME(3)或TIMESTAMP(3),不需要保存毫秒的话,只需要将类型直接写为DATETIME TIMESTAMP。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #mysql时间精确到毫秒 #MySQL #timestamp #datetime精确到毫秒问题