programing

MySQL/MariaDB 오류가 발생하도록 경고 구성

newstyles 2023. 9. 6. 21:51

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를 통해 직접 애드혹 쿼리를 수행하더라도 항상 오류가 발생하도록 구성 파일을 편집하고 싶습니다.

다른 비슷한 질문들을 발견했지만 아무도 이 질문들에 응답하지 않았습니다.

MariaDB에 오류 대신 경고가 표시됨

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