MySQL/MariaDB 오류가 발생하도록 경고 구성
MySQL/MariaDB가 경고 메시지 대신 오류 메시지를 던져야 합니다.
이유: 제 개발 환경에서는 SQL/PHP에서 경고가 무시되므로(SQL과 PHP 모두 계속 처리) 테스트 시 문제를 감지할 수 없습니다.그러나 프로덕션에서 모든 경고는 쿼리를 충돌시켜 API를 종료하고 사용자에게 "실패" 메시지를 반환합니다.
이것은 매우 나쁜 결과이고 과거에 많은 두통을 일으켰습니다.
다음은 많은 문제를 일으킨 매우 구체적인 시나리오입니다.
pk와 bRequiredBoolean의 두 열이 있는 테이블 "testtable"이 있습니다. 여기서 pk는 기본 키(즉, 자동 증분)이고 bRequiredBoolean은 기본값이 없습니다.
CREATE TABLE `test`.`testtable` ( `pk` INT NOT NULL AUTO_INCREMENT , `bRequiredBoolean` BOOLEAN NOT NULL , PRIMARY KEY (`pk`)) ENGINE = InnoDB;
개발 서버에서 다음 쿼리를 실행할 수 있습니다.
INSERT INTO `testtable`() VALUES ()
다음과 같은 경고를 받습니다.
Warning: #1364 Field 'bRequiredBoolean' doesn't have a default value
저의 개발 서버에서는 엔트리가 삽입되어 API가 계속 실행됩니다.
제 프로덕션 서버에서는 엔트리가 삽입되지 않아 API가 크래시됩니다.
개발/테스트 서버가 동일해야 이런 문제가 발생하지 않는다는 것은 알고 있지만, 현재 추가 라이선스를 위한 자금이 없어서 위와 같은 시나리오를 잡기 위해 경고 대신 오류 메시지를 던지는 대안을 원합니다.
참고 사항:각 쿼리에 추가 코드를 삽입하고 싶지 않고 구성 파일을 편집하고 싶습니다.예를 들어 모든 쿼리에 다음 코드를 추가하고 싶지 않습니다.
SHOW COUNT(*) WARNINGS
GUI를 통해 직접 애드혹 쿼리를 수행하더라도 항상 오류가 발생하도록 구성 파일을 편집하고 싶습니다.
다른 비슷한 질문들을 발견했지만 아무도 이 질문들에 응답하지 않았습니다.
mysql warning pdo에 오류가 발생했습니다.
어떤 도움이라도 주시면 감사하겠습니다.
바마르의 코멘트 덕분에 저는 제 문제의 해결책을 찾았습니다.
SQL_Mode는 다음을 통해 확인할 수 있습니다.
SELECT @@SQL_MODE;
"Traditional"이라는 모든 경고에 대해 오류를 발생시키는 SQL_Mode 설정이 있다고 합니다.
SQL_Mode 값에 대한 자세한 내용은 mySQL 공식 웹사이트 https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-full 를 참조할 수 있습니다.
그래서 다음 쿼리를 실행했습니다.
SET GLOBAL sql_mode = 'TRADITIONAL';
쿼리를 실행한 후 이전과 동일한 쿼리를 실행했습니다.
INSERT INTO `testtable`() VALUES ()
그리고 다음 오류를 받았습니다.
Error
SQL query: Copy
INSERT INTO `testtable`() VALUES ();
MySQL said: Documentation
#1364 - Field 'bRequiredBoolean' doesn't have a default value
이것이 바로 제가 필요했던 것입니다.정말 감사합니다 @Barm!
언급URL : https://stackoverflow.com/questions/69775800/mysql-mariadb-configure-warnings-to-throw-errors
'programing' 카테고리의 다른 글
날짜로부터 두 개의 mariadb 데이터베이스를 동기화하려면 어떻게 해야 합니까? (0) | 2023.09.06 |
---|---|
두 개의 포맷 문자열이 호환되는지 확인하는 방법은? (0) | 2023.09.06 |
Jenkins Pipeline Git SCM 자격 증명 확인? (0) | 2023.09.01 |
Spring MVC에서 AJAX를 사용하여 뷰를 렌더링하는 방법 (0) | 2023.09.01 |
SHA256 in swift (0) | 2023.09.01 |