MySQL 날짜 정보 추가하기

최민영·2024년 9월 24일

IntelliJ

목록 보기
20/30

회원 정보 detail 페이지에 뭔가 추가하고 싶어서 아이디를 생성한 날로부터 며칠이 지났는지를 보여주고자 테이블에 날짜 정보를 추가해보고자 한다.

MySQL에서의 날짜 및 시간 정보를 담는 타입으로는
DATE / DATETIME / TIME / TIMESTAMP 가 있다.

Date : 날짜만 포함 YYYY-mm-dd

DateTime : 날짜 + 시간 YYYY-mm-dd HH:MM:SS

Time : 시간 HH:MM:SS

TimeStamp : 날짜 + 시간 (time_zone 영향 받음) YYYY-mm-dd HH:MM:SS

DateTime과 TimeStamp의 차이로는 둘의 타입이 각각 문자/숫자형인 점, 저장공간이 8byte/4byte인 점, 자동입력의 유무(timestamp O), 타임존의 영향을 받는 점(timestamp O) 정도가 있다.

일단 기존에 만들어뒀던 테이블에 column을 추가해야 하므로 인텔리제이의 mysql console에 다음과 같이 작성한다.

alter table member_table add column create_time date;

alter table (테이블명) add column (칼럼명) (변수타입) 정도로 선언하면 되며, NOT NULL/DEFAULT 및 ON UPDATE 등의 옵션도 있으나 나는 날짜 정보만 필요하므로 다른 옵션은 선택하지 않을 예정이다.

alter table member_table alter column create_time set default (current_date);

행을 추가할 때마다 create_time 칼럼 값에 현재 날짜를 디폴트 값으로 주기 위해 칼럼 옵션에 default (current_date)를 추가해줬다.
-> alter column인지, modify column인지 등에 따라서도 뒤에 따라오는 옵션이 달라진다

  • alter column 칼럼명 set default 디폴트타입
  • modify column 칼럼명 타입 default 디폴트타입
    -> 칼럼 타입을 date로 주느냐 datetime/timestamp로 주느냐에 따라서 디폴트타입을 주는 방식이 달라진다.
  • date 타입인 경우 (current_date)
  • datetime 타입인 경우 (current_date) / (current_datetime)
  • 괄호 안에 작성하는 것과 아닌 것도 잘 구분해서 작성하기

이런식으로 분명 디폴트 값을 설정해줬는데도 새로 회원가입을 했을 때 date 란에 현재 날짜가 자동으로 찍히지 않는 것 ...

show columns from member_table;

테이블에 있는 칼럼들의 옵션을 보여주는 코드를 통해 설정된 값을 봤는데 default에 curdate()라고 잘 들어가있어서 더 당황스러웠다.

검색해보니 Entity에 @DynamicInsert 어노테이션을 추가하라는 글을 발견했다.

처음에는 해당 어노테이션을 추가하고 나니 회원가입 페이지에서 white label 오류가 발생했는데, 그 차이인지는 모르겠지만 @Table 어노테이션 밑에 추가해보니 오류가 발생하지 않았다...?

0개의 댓글