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

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

QA

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

답변 3

본문

카페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

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

자문자답..

 

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

 

SET sql_mode=EMPTY_STRING_IS_NULL;

 

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

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

SQL_MODE - MariaDB Knowledge Base

 

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 174
© SIRSOFT
현재 페이지 제일 처음으로