mysql error 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
필드를 null로 만들지 않고 트리거퍼를 제거하지 않고 이 오류를 억제할 수 있는 방법이 있습니까?그렇지 않으면 (삽입이 완료되어도) 휴지 상태가 되어, 애플리케이션이 크래쉬 합니다.
은 '아,아,아,아,아,아,아,아'가 원인입니다.STRICT_TRANS_TABLES
모드에서
%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 및 goto 'More' 탭을 열고 'Variables' 하위 메뉴를 선택합니다.아래로 스크롤하여 sql 모드를 찾습니다.sql 모드를 편집하고 'STRICT_TRANS_TAB'를 제거합니다.LES ' 아껴둬.
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'
「」의 합니다.Created_By
empty (비어 있음: empty)VARCHAR
이치노
create table try (
name varchar(8),
CREATED_BY varchar(40) DEFAULT '' not null
);
홈브루가 설치된 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='';
그러면 strict 모드가 꺼지고 mysql은 더 이상 불평하지 않습니다.
알기 쉽게 하기 위해 데이터베이스 정의에서는 "이 필드는 반드시 기본값이 정의되어야 합니다"라고 말하고 위에서 MySql에 "neah, 그냥 무시하세요"라고 말합니다.따라서 로컬에서 몇 가지 빠른 수정을 원하는 경우 이 솔루션을 사용할 수 있습니다.그러나 일반적으로 데이터베이스 정의에서 조사하여 필드에 정말로 기본값이 필요한지 확인하고 기본값이 필요한 경우 설정해야 합니다.또한 기본값이 필요하지 않은 경우 깨끗한 상태를 유지하기 위해 이 요건을 삭제해야 합니다.
아래 줄에 삽입 작업을 추가할 때마다 문제를 해결하기 전에
SET SQL_MODE = '';
이게 최선의 해결책인지는 모르겠지만
SET SQL_MODE = ''; INSERT INTO `mytable` ( `field1` , `field2`) VALUES ('value1', 'value2');
다른 사람들이 말한 것처럼, 이 문제는STRICT_TRANS_TABLES
SQL 드드
를 STRICT_TRANS_TABLES
모드는 유효합니다.
SHOW VARIABLES LIKE 'sql_mode';
strict 모드를 디세블로 하려면:
SET GLOBAL sql_mode='';
쿼리를 수정하고 다음과 같이 "IGNORE"를 추가합니다.
INSERT IGNORE INTO `mytable` ( `field1` , `field2`) VALUES ('value1', 'value2');
동작과 테스트에서는 /etc/mysql/my.cnf OR /bin/mysql/my.ini에 복사했습니다.
[mysqld]
port = 3306
sql-mode=""
그런 다음 MySQL을 재시작합니다.
이 문제는 MySQL의 (2004년 이후)오래된 버그(#6295)로 인해 발생합니다.
NOT NULL 열에 대해서는 트리거가 처리되지 않습니다.
2013년 MySQL 버전 5.7.1(Changelog, 마지막 항목)에서 수정되었기 때문에 MySQL은 "SQL 표준에 따라"(ibid) 동작했다고 합니다.
Windows WampServer 사용자의 경우:
WAMP > MySQL > my.ini
을 sql-mode=""
코멘트 해제.
Windows Server에서 my.ini를 편집합니다(예: 프로그램 파일\mysql\mysql 서버 n.n\my.ini).
단순히 sql-mode=syslog를 설정하는 것이 아니라 회선에서 STICT_TRANS_TABLES를 삭제하고 모든 것을 그대로 두었다가 서비스 유틸리티에서 MySQL을 재시작할 것을 권장합니다.미래의 프로그래머에게 당신이 누구인지, 무엇을 했는지 코멘트를 추가하세요.
필드를 null이 아닌 것으로 설정하면 문제가 해결됩니다.이 필드는 정보를 저장하도록 명령되면 갱신됩니다.또한 필드에 값을 삽입하지 않았기 때문에 필드가 비어 있다는 msqli 메시지가 표시되지 않습니다.이 솔루션의 적용은 프로젝트 구조에 따라 달라집니다.
이것은 SYNOLOGY 디바이스 사용자용입니다.
- SYNOLOGY는, 「SYNOLOGY」라고 하는, 「SYNOLOGY는, 「OFF」를 참조해 주세요.
.0- 로 체크) (DSM 7.0.1-42218 - DS418
PUTTY:
루트로 로그인하여
그 후 sudo su...(관리 합계)
- 존재하지 않는 경우 다음 위치에 my.cnf를 만듭니다.
5 MariaDB 5:
/var/packages/MariaDB/etc
10 MariaDB 10:
/var/packages/MariaDB10/etc
- 이 파일은 파일에 있어야 합니다(적어도 strict mode off의 경우).
# custom configs
[mysqld]
innodb_strict_mode = OFF
sql_mode = ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
daemon : mysqld " " " :
5 MariaDB 5:
재시작 마리아/usr/syno/bin/synopkg 데이터베이스DB
10 MariaDB 10:
MariaDB10/usr/syno/bin/synopkg 。되어 두 가지 글로벌옵션은 꺼야 위의 참조). strict는 2가지입니다.설정하다
mysql: ""
- u root - pmysql - u - - - p비밀번호 입력:
' 'sql_mode'와 같은 합니다.
'%STRICT%'와 같은 변수를 표시합니다.
데이터 폴더에 있는 my.ini 파일을 변경하는 문제를 해결했습니다.mysql 5.6 my.ini 파일이 bin 또는 mysql 설치 폴더가 아닌 데이터 폴더로 이동되었습니다.
이 경우 in name column에는 null 값이 포함되어 있다고 생각합니다.
update try set name='abc' where created_by='def';
Linux용 Xampp 7.3.28-1을 사용하고 있습니다.MariaDB 10.4.19를 사용합니다.설정 파일은 /opt/lampp/etc/my.cnf 입니다.
sql_mode를 정의하는 엔트리는 포함되지 않습니다.그러나 "select @@GLOBAL.sql_mode;" 쿼리는 결과를 반환하고 문제가 있는 STIRT_TRANS_TABLES를 포함합니다.지금은 디폴트인 것 같아요.
이 솔루션은 [mysqld] 아래에 sql_mode= 행을 추가하여 모드를 명시적으로 정의하는 것이었습니다.NO_AUTO_CREATE_USER, NO_ENGINE_SUBTITION
필요한 모드를 정의할 수도 있고 비워둘 수도 있습니다.
외부 키와 프라이머리 키의 더블 업을 제거하고 나면 테이블 내의 프라이머리 키로 외부 키를 사용할 수 있다는 것을 알게 되었습니다.모든 코드가 작동하여 db에 업로드할 수 있었습니다.
언급URL : https://stackoverflow.com/questions/15438840/mysql-error-1364-field-doesnt-have-a-default-values
'programing' 카테고리의 다른 글
카운트다운이 카운트다운보다 빠릅니까? (0) | 2023.01.17 |
---|---|
마리아에서 열 이름 변경DB (0) | 2023.01.17 |
MySQL 빈 집합의 동작 오류 (0) | 2023.01.17 |
Vuex store state : 싱글샷에서 상태 값을 재설정하기 위한 변수와 함수를 혼합하는 방법 (0) | 2022.11.23 |
JavaScript에서 "arguments" 개체를 배열로 변환하려면 어떻게 해야 합니까? (0) | 2022.11.23 |