?: (mysql.W002) MariaDB Strict Mode is not set for database connection 'default'
뷰단 수정을 진행하였는데, 이로 인해 테스트케이스 통과가 안되는 이슈가 발생해서 도커가 자동으로 종료되는 일이 발생하였다.
이슈 해결을 위해 도커 로그를 보게 되었는데 아래와 같은 로그가 떠있어서 번역 및 구글링을 진행하여 해결하였다.
1. 이슈내용
2021-04-21T05:59:08.285801940Z ?: (mysql.W002) MariaDB Strict Mode is not set for database connection 'default'
- MariaDB Strict Mode가 '기본' 데이터베이스 커넥션으로 설정되어 있지 않습니다.
2021-04-21T05:59:08.285805079Z HINT: MariaDB's Strict Mode fixes many data integrity problems in MariaDB, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See:
힌트: MariaDB의 Strict Mode는 경고를 에러로 격상시켜 데이터 추가 시 데이터 잘림과 같은 데이터 베이스 내 데이터 무결성 문제를 해결합니다. 활성화하는 것이 좋습니다.
2. 해결하기
로그에서 보라는 문서는 아래와 같다.
docs.djangoproject.com/en/3.2/ref/databases/#mysql-sql-mode
Setting sql_mode¶
From MySQL 5.7 onwards, the default value of the sql_mode option contains STRICT_TRANS_TABLES. That option escalates warnings into errors when data are truncated upon insertion, so Django highly recommends activating a strict mode for MySQL to prevent data loss (either STRICT_TRANS_TABLES or STRICT_ALL_TABLES).
If you need to customize the SQL mode, you can set the sql_mode variable like other MySQL options: either in a config file or with the entry 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'" in the OPTIONS part of your database configuration in DATABASES.
MySQL 5.7 이상부터 sql_mode 옵션으로 STRICT_TRANS_TABLES 또는 STRICT_ALL_TABLES 가 있다고 한다.
장고는 데이터 손실을 방지하기 위해 위 옵션을 추가하는 것을 매우 추천한다고 한다.
장고 문서에 따라 장고 프로젝트 내 settings.py (또는 DB 세팅을 넣어놓은 파일)에 'OPTIONS"라는 행을 하나 만들고
'init_command': "SET sql_mode='STRICT_TRANS_TABLES' 을 넣어주면 위 메세지는 없어진다.
DATABASES = { 'default': { 'ENGINE' : 'django.db.backends.mysql', 'NAME':'데이터베이스 명칭', 'USER':'DB 진입 유저 아이디', 'PASSWORD':'DB 진입 유저 비밀번호', 'HOST':'호스트 IP', 'PORT':'포트번호', 'OPTIONS': { 'init_command' : "SET sql_mode='STRICT_TRANS_TABLES'", } }, }
끝!