# UTC 시간으로 기록되는 이슈 발생했다.
# 다음과 같은 구조에서 time.Now() 값을 설정했을때
type TestInfo struct {
ID int64
LastDate time.Time
Age int
Name string
Enable bool `gorm:"not null"`
CreatedAt time.Time
}
user.CreatedAt = time.Now()
# gorm debug 창으로 표시되는 sql 문에는 local 시간으로 쿼리가 수행되었다고 나오지만
2020/11/19 21:17:32 /Users/ysoftman/workspace/test_code/golang/sql_db/sql_gorm.go:68
[1.201ms] [rows:1] INSERT INTO `test_info` (`last_date`,`age`,`name`,`enable`,`created_at`) VALUES ('2020-11-19 21:17:32.054',21,'bill',true,'2020-11-19 21:17:32.054')
# 실제 db 를 조회해보면 UTC 시간으로 저장되어 있다.
mysql> select * from mytest.test_info;
+----+------+------+---------------------+--------+---------------------+
| id | age | name | last_date | enable | created_at |
+----+------+------+---------------------+--------+---------------------+
| 23 | 0 | | 2020-11-19 12:17:32 | 0 | 2020-11-19 12:17:32 |
+----+------+------+---------------------+--------+---------------------+
1 row in set (0.00 sec)
# 해결방법1(권장)
# db 접속 DSN 파라미터에 loc=Asia/Seoul 로 설정해야 로컬 시간값으로 설정된다.
username:password@protocol(address)/dbname?charset=utf8&parseTime=True&loc=Asia%2FSeoul
# 해결방법2
# time 값을 string 으로 저장한다. 하지만
# 기존 저장된 데이터 포맷에 의존적이라 비추
CreatedAt string 으로 선언
user.CreatedAt = time.Now().Format("2006-01-02 15:04:05")
# 테스트코드
comments:
댓글 쓰기