MySQL中TIMESTAMP類型返回日期時間數(shù)據(jù)中帶有T的解決
TIMESTAMP類型返回日期時間數(shù)據(jù)中帶有 T
場景描述
MySQL 中使用 TIMESTAMP 類型
實體類使用 java.util.Date 類型
返回 JSON 數(shù)據(jù):

通過注解格式化(方法一)
可以在日期類型屬性上,或者 GET 方法加上 Jackson 的 @JsonFormat 注解方式來格式化,例如:
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date updateTime;
結(jié)果:

通過全局配置(方法二)
@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日期時間類型
| 日期類型 | 字節(jié) | 最小值 | 最大值 |
|---|---|---|---|
| DATE | 4 | 1000-01-01 | 9999-12-31 |
| DATETIME | 8 | 1000-01-01 | 00:00:00 |
| TimeStamp | 4 | 197001010800001 | 2038年 |
| Time | 3 | -838:59:59 | 838:59:59 |
| year | 1 | 1901 | 2155 |
知識點:
- 1 如果需要經(jīng)常插入或者更新日期為當(dāng)前時間 則通常使用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的結(jié)合
Timestamp實例
CREATE TABLE ttt (t timestamp);

系統(tǒng)自動給timestamp加上了默認值
INSERT INTO ttt VALUES(NULL)
select * from ttt

插入null 系統(tǒng)自動插入了當(dāng)前時間戳
mysql中只給表中的第一個timestamp字段類型設(shè)置默認值為當(dāng)前日期 如果有第二個timestamp類型則默認值設(shè)置為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也變化成了當(dāng)前時間 這是一個大坑 尤其是在一些需要按創(chuàng)建時間排序的需求中
所以結(jié)論是在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沒發(fā)生變化
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
[MySQL binlog]mysql如何徹底解析Mixed日志格式的binlog
這篇文章主要介紹了mysql徹底解析Mixed日志格式的binlog,需要的朋友可以參考下2014-02-02
MySQL學(xué)習(xí)之InnoDB結(jié)構(gòu)探秘
這篇文章主要是對InnoDB結(jié)構(gòu)的探秘,InnoDB是基于磁盤存儲,其存儲的最基本單元是頁,大小為16KB。而CPU和磁盤之間速度相差懸殊,所以通常使用內(nèi)存中的緩沖池來提高性能,感興趣的同學(xué)可以參考閱讀2023-03-03
MySQL數(shù)據(jù)庫中把int轉(zhuǎn)化varchar引發(fā)的慢查詢
這篇文章主要介紹了MySQL數(shù)據(jù)庫中把int轉(zhuǎn)化varchar引發(fā)的慢查詢 的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-07-07

