[mysql] mysql 오류 1364 필드에 기본값이 없습니다.

내 테이블은

create table try ( name varchar(8), CREATED_BY varchar(40) not null);

그런 다음 CREATED_BY 필드를 자동으로 채우는 트리거가 있습니다.

create trigger autoPopulateAtInsert BEFORE INSERT on try for each row set new.CREATED_BY=user();

삽입을 할 때

insert into try (name) values ('abc');

항목이 테이블에 작성되었지만 여전히 오류 메시지가 나타납니다.

Field 'CREATED_BY' doesn't have a default value Error no 1364

필드를 nullable로 만들지 않고 triggfer를 제거하지 않고이 오류를 억제하는 방법이 있습니까? 그렇지 않으면 내 최대 절전 모드에서 이러한 예외가 표시되고 (삽입이 이루어 졌더라도) 응용 프로그램이 충돌합니다.



답변

에 대한 기본값을 설정하면 Created_By(예 : empty VARCHAR) 트리거가 값을 업데이트합니다.

create table try (
     name varchar(8),
     CREATED_BY varchar(40) DEFAULT '' not null
);


답변

이것은에 STRICT_TRANS_TABLES정의 된 SQL 모드 로 인해 발생 합니다.

% PROGRAMDATA % \ MySQL \ MySQL Server 5.6 \ my.ini

파일. 해당 설정을 제거하고 MySQL을 다시 시작하면 문제가 해결됩니다.

보다 https://www.farbeyondcode.com/Solution-for-MariaDB-Field–xxx–doesn-t-have-a-default-value-5-2720.html를

해당 파일을 편집해도 문제가 해결되지 않으면 http://dev.mysql.com/doc/refman/5.6/en/option-files.html 에서 구성 파일의 다른 가능한 위치를 참조 하십시오 .


답변

phpmyadmin을 열고 ‘More’탭으로 이동하여 ‘Variables’하위 메뉴를 선택합니다. 아래로 스크롤하여 SQL 모드를 찾습니다. SQL 모드를 편집하고 ‘STRICT_TRANS_TABLES’를 제거하십시오. 저장하십시오.


답변

phpmyadmin에서 다음을 수행하십시오.

select @@GLOBAL.sql_mode

제 경우에는 다음을 얻습니다.

ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES ,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

이 결과를 복사하고 STRICT_TRANS_TABLES. 그런 다음 다음을 수행하십시오.

set GLOBAL sql_mode='ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'


답변

Homebrew와 함께 설치된 mysql5.6.20에서 이와 동일한 문제가 발생했을 때 my.cnf로 이동하여 문제를 해결했습니다.

nano /usr/local/Cellar/mysql/5.6.20_1/my.cnf

다음과 같은 줄을 찾으십시오.

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

줄 위에 주석을 달고 mysql 서버를 다시 시작하십시오.

mysql.server restart

오류가 사라졌습니다!


답변

mysql 콘솔을 실행합니다.

mysql -u your_username -p

, 데이터베이스 선택 :

USE your_database;

(mysql 콘솔에서도) 실행하십시오.

SET GLOBAL sql_mode='';

그것은 엄격 모드를 끄고 mysql은 더 이상 불평하지 않을 것입니다.

명확하게하기 위해 데이터베이스 정의에 “이 필드에는 기본값이 정의되어 있어야합니다”라고 말하고 위에서 단계를 수행하여 MySql에 “그냥 무시하십시오”라고 말합니다. 따라서 로컬에서 빠른 수정을 원할 경우이 솔루션은 괜찮습니다. 그러나 일반적으로 데이터베이스 정의를 조사하고 필드에 실제로 기본값이 필요한지 확인하고 필요한 경우 설정해야합니다. 그리고 기본값이 필요하지 않은 경우이 요구 사항을 제거하여 상황을 정리해야합니다.


답변

다른 사람들이 말했듯이 이것은 STRICT_TRANS_TABLESSQL 모드로 인해 발생 합니다.

STRICT_TRANS_TABLES모드가 활성화 되었는지 확인하려면 :

SHOW VARIABLES LIKE 'sql_mode';

엄격 모드를 비활성화하려면 :

SET GLOBAL sql_mode='';