그누보드 디비서버 변경시, #1364 - Field 'wr_comment_reply' doesn't have a default value 오류 해결 방법
페이지 정보
본문
#1364 - Field 'wr_comment_reply' doesn't have a default value
그누보드를 새 서버로 이전한 후에 글쓰기가 안되는 현상이 발생했다.
오류 메시지가 없어서, 처음엔 SELinux 를 의심했는데, SELinux 를 허용한 후에도 같은 증상이 발생한다.
# 원인
MariaDB 가 버전업이 되면서 Setting SQL_MODE 의 기본값이 달라졌다.
https://mariadb.com/kb/en/sql-mode/
문제는 STRICT_TRANS_TABLES 가 기본값이 들어갔다는 것이다.
STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
그리고, MySQL 에서도 버전이 높아지면서 같은 현상이 발생한다.
https://www.fun25.co.kr/blog/mysql-error-1364-solution/?page=5
원인은
테이블 생성시 필드에 default 값을 따로 지정을 안 해도 insert 시에 '' 처럼 자동으로 값이 들어갔는데,
STRICT_TRANS_TABLES 모드에서는 테이블 생성시에 default 값을 지정하지 않을 경우 insert 시에 오류가 발생한다.
# 문제점
그누보드 기본소스에서 wr_comment_reply 필드에 기본값이 없다.
그래서, 게시판 글쓰기에서 오류가 나고 글쓰기가 되지 않는다.
그누보드의 원본 소스가 수정이 되어야 할 듯 하다.
# 해결방법 1
각 테이블의 해당 컬럼들의 default 값을 변경한다.
```
alter TABLE g5_write_table alter column wr_comment_reply set DEFAULT '', alter column wr_facebook_user set DEFAULT '', alter column wr_twitter_user set DEFAULT '' ;
```
* 참고
https://stackoverflow.com/questions/61244466/how-to-set-multiple-default-constraint-to-multiple-columns-at-once-in-mysql
# 해결방법 2
https://xinet.kr/?p=2191
테이블이나 소스파일들을 수정할 수도 있지만, 오래된 소스파일들을 다 수정할 수가 없기 때문에,
디비에서 STRICT_TRANS_TABLES 모드를 제거하기로 한다.
/etc/my.cnf 파일의 [mysqld] 섹션에 아래의 내용을 추가한 후 mariadb 를 재시작한다.
sql_mode = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# HeidiSQL 에서 변경 방법
DB 서버 선택 후 변수목록 에서 sql_mode 를 찾는다.
기본값이 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 로 되어 있으면,
더블클릭 후에 'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 로 변경한 후에,
범위를 '전체' 로 한 후에 확인을 누른다.
그누보드를 새 서버로 이전한 후에 글쓰기가 안되는 현상이 발생했다.
오류 메시지가 없어서, 처음엔 SELinux 를 의심했는데, SELinux 를 허용한 후에도 같은 증상이 발생한다.
# 원인
MariaDB 가 버전업이 되면서 Setting SQL_MODE 의 기본값이 달라졌다.
https://mariadb.com/kb/en/sql-mode/
문제는 STRICT_TRANS_TABLES 가 기본값이 들어갔다는 것이다.
STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
그리고, MySQL 에서도 버전이 높아지면서 같은 현상이 발생한다.
https://www.fun25.co.kr/blog/mysql-error-1364-solution/?page=5
원인은
테이블 생성시 필드에 default 값을 따로 지정을 안 해도 insert 시에 '' 처럼 자동으로 값이 들어갔는데,
STRICT_TRANS_TABLES 모드에서는 테이블 생성시에 default 값을 지정하지 않을 경우 insert 시에 오류가 발생한다.
# 문제점
그누보드 기본소스에서 wr_comment_reply 필드에 기본값이 없다.
그래서, 게시판 글쓰기에서 오류가 나고 글쓰기가 되지 않는다.
그누보드의 원본 소스가 수정이 되어야 할 듯 하다.
# 해결방법 1
각 테이블의 해당 컬럼들의 default 값을 변경한다.
```
alter TABLE g5_write_table alter column wr_comment_reply set DEFAULT '', alter column wr_facebook_user set DEFAULT '', alter column wr_twitter_user set DEFAULT '' ;
```
* 참고
https://stackoverflow.com/questions/61244466/how-to-set-multiple-default-constraint-to-multiple-columns-at-once-in-mysql
# 해결방법 2
https://xinet.kr/?p=2191
테이블이나 소스파일들을 수정할 수도 있지만, 오래된 소스파일들을 다 수정할 수가 없기 때문에,
디비에서 STRICT_TRANS_TABLES 모드를 제거하기로 한다.
/etc/my.cnf 파일의 [mysqld] 섹션에 아래의 내용을 추가한 후 mariadb 를 재시작한다.
sql_mode = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# HeidiSQL 에서 변경 방법
DB 서버 선택 후 변수목록 에서 sql_mode 를 찾는다.
기본값이 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 로 되어 있으면,
더블클릭 후에 'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 로 변경한 후에,
범위를 '전체' 로 한 후에 확인을 누른다.
추천0
댓글목록
등록된 댓글이 없습니다.