서론
역시 프로젝트를 진행하다 보면 블로그에 쓸만한 글감들이 팡팡 튀어 오르는 것 같다.
@Modifying에 대해 공부를 하며 프로젝트에 적용을 시키던 도중 @Modifying을 사용하면 @LastModifiedDate 어노테이션이 먹통이 되는지 업데이트가 되지 않는 현상을 발견했다.
그래서 @query를 이용하여 set을 하는 김에 lastModifiedAt 칼럼에 직접 현재 시간을 집어넣기로 했다.
@Modifying(clearAutomatically = true)
@Query("update Comment c set c.comment = :comment, c.lastModifiedAt = current_timestamp where c.id = :commentId ")
void update(@Param("comment") String comment, @Param("commentId") Integer id) ;
그랬더니.. 시간이 현재 시간보다 과거로 돌아가버렸다.
본론
MySQL에 지정된 System Time Zone이 한국이 아닌, 다른 나라의 시간으로 지정 되어 있어서 타 국가의 시간이 DB에 저장이 되는 것이었다.
다시 한번 MySQL 내에서 현재 시간을 조회해 보자.SELECT CURRENT_TIMESTAMP;
현재 지정된 시간이 어느 나라인지 궁금하다면SHOW GLOBAL VARIABLES LIKE '%zone%';
쿼리를 MySQL에서 날려보라.
그렇다면 Time_zone은 SYSTEM으로 되어있고, system_time_zone은 협정 세계시로 되어 있는 것을 확인할 수 있다.
우리는 이 time_zone을 서울시간으로 바꾸면 된다.
set time_zone = 'Asia/Seoul';
해당 쿼리를 MySQL에서 사용해 보자.
해당 쿼리를 사용한 후 현재 시간 쿼리를 날려보면 시간이 바뀐 것을 확인할 수 있다.
하지만 time_zone은 여전히 'SYSTEM'으로 되어 있는 것을 확인할 수 있는데
set global time_zone ='Asia/Seoul';
쿼리를 보내면 time_zone 역시 'Asia/Seoul'로 바뀐 것을 확인할 수 있다.
결론
참조
'Basic > Database' 카테고리의 다른 글
[Redis] Redis Spring 세팅 (0) | 2023.01.08 |
---|---|
[Redis] Redis 설치 (0) | 2023.01.08 |
[Oracle] Select 문 (3) - ORDER BY 절 (0) | 2022.06.09 |
[Oracle] Select 문 (2) - WHERE 절 (0) | 2022.05.15 |
[Oracle] Select 문 (1) - SELECT/FROM절 (0) | 2022.05.13 |