테스트 사이트 - 개발 중인 베타 버전입니다

테이블 숫자필드에 '' 값을 넣으면 0 이나 NULL 로 저장하는 방법

도레미 1년 전 조회 11,993

카페24에서 호스팅을 하고 있고 DB는 MariaDB 10.6 입니다
테이블 구조는 다음과 같습니다.

 

`INT1` INT(6) NOT NULL,

`STR1` CHAR(10) NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',

`INT2` INT(11) UNSIGNED NULL DEFAULT NULL,

`TYNIINT1` TINYINT(4) UNSIGNED NULL DEFAULT NULL,

...

 

이 테이블에의 숫자 필드에 '' 값을 주면 null 이나 0 으로 저장하고 싶습니다.
아래와 같이 말이죠..

 

INSERT INTO table1 (INT1,STR1,INT2,TYNIINT1) VALUES (100,'AAA','','')

 

그런데 이 같이 하면 에러가 납니다.

Incorrect integer value: '' for column `yogi`.`table1`.`INT2`

INT2 필드에 잘못된 integer 값이란 뜻이죠..


아래와 같이 하면 정상적으로 저장됩니다.

 

INSERT INTO table1 (INT1,STR1,INT2,TYNIINT1) VALUES (100,'AAA','0','0')
INSERT INTO table1 (INT1,STR1,INT2,TYNIINT1) VALUES (100,'AAA',0,0)

 

그런데 원하는 것은 첫번째 처럼 '' 로 입력해도 NULL 이나 0 으로 저장하고 싶습니다.
php 에서 배열($a)의 값을 차례로 넣을건데 어떤게 문자고 어떤게 숫자인지 일일이 찾기 힘들어서 아래 처럼 하려고 하거든요..

 

INSERT INTO table1 (INT1,STR1,INT2,TYNIINT1) VALUES (100,'$a[1]','$a[2]','$a[3]')

 

그런데 여기서 $a[2] $a[3] 값이 null 이면 (100,'AAA','','') 으로 들어 가는것 같은데, 그러면 에러가 납니다.

옛날에는 그냥 되었던것 같은데 제가 착각했던건지, 아니면 MariaDB 버전에 따라 다른건지 모르겠습니다...ㅠ
오후 내내 하다 포기하고 여기를 다시 찾았습니다..

누가 좀 도와 주세요..ㅠ

 

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

1년 전

자문자답..

 

찾았습니다. 아래와 같이 sql mode 를 먼저 날려 준 뒤에 입력하면 됩니다.

 

SET sql_mode=EMPTY_STRING_IS_NULL;

 

(공백 문자는 NULL 로 취급해라... 이런 뜻이겠네요.)

mariaDB 10.3 이후로 지원한다고 합니다.

https://mariadb.com/kb/en/sql-mode/">SQL_MODE - MariaDB Knowledge Base

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

1년 전

별도로 데이터 타입을 검사하는 함수를 만들어서 검증 후 입력하시면 어떨까요?

 

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

1년 전

간단하게는 값을 넣을때 (int)$a[1] 식으로 형을 정해주시면 0이 들어가실겁니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

도레미
1년 전
음~ 문제는 $a[1]이 숫자인지,문자인지 모르는 경우에도 저장 하고 싶어서 입니다..

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인