首頁 > 軟體

MySQL中TIMESTAMP型別返回日期時間資料中帶有T的解決

2022-12-25 14:03:44

TIMESTAMP型別返回日期時間資料中帶有 T

場景描述

MySQL 中使用 TIMESTAMP 型別

實體類使用 java.util.Date 型別

返回 JSON 資料:

通過註解格式化(方法一)

可以在日期型別屬性上,或者 GET 方法加上 Jackson 的 @JsonFormat 註解方式來格式化,例如:

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;

結果:

通過全域性設定(方法二)

@Configuration
public class WebMvcConfig {
    @Bean
    MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper mapper = new ObjectMapper();
        mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        converter.setObjectMapper(mapper);
        return converter;
    }
}

MySQL時間型別timestamp知識點

mysql日期時間型別

日期型別位元組最小值最大值
DATE41000-01-019999-12-31
DATETIME81000-01-0100:00:00
TimeStamp41970010108000012038年
Time3-838:59:59838:59:59
year119012155

知識點:

  • 1 如果需要經常插入或者更新日期為當前時間 則通常使用Timestamp,timestamp值返回後顯示為”YYYY-MM-DD HH:MM:SS”格式的字串
  • 2 如果只表示年份可以用year 他比date佔用更少的空間year有2位或者4位元格式的年預設為4位元
  • 3 每種日期型別都有一個有效值範圍如果超出這個範圍將以零值進行儲存

DATE TIME DATETIME為最常用

範例:

CREATE TABLE t (d date , t  time , dt datetime);
desc t

insert INTO t VALUES(NOW(),NOW(),NOW())
select * from t

DATETIME是date和time的結合

Timestamp範例

CREATE TABLE ttt (t timestamp);

系統自動給timestamp加上了預設值

INSERT INTO ttt VALUES(NULL)
select * from ttt

插入null 系統自動插入了當前時間戳

mysql中只給表中的第一個timestamp欄位型別設定預設值為當前日期 如果有第二個timestamp型別則預設值設定為0

alter TABLE ttt add t2 timestamp;
SHOW CREATE TABLE ttt;
CREATE TABLE `ttt` (
  `t` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `t2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=utf8

mysql一個表中值允許一列的預設值為current_timestamp

INSERT INTO ttt VALUES(null,null)

update ttt set t2 = '2015-11-28 03:00:40' where t='2015-11-27 03:00:40'

t2 變了 t也變化成了當前時間 這是一個大坑 尤其是在一些需要按建立時間排序的需求中

所以結論是在mysql中使用時間欄位timestamp時注意一定要 加上初始化的值 並且不能是current_timestamp

修改t為有初始值

alter TABLE ttt   change `t` `t` timestamp default '0000-00-00 00:00:00' NOT NULL ;
desc ttt

此時再去

update ttt set t2 = '2015-11-28 04:00:40' where t='2015-11-27 03:02:50'

t沒發生變化

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com