테이블 숫자필드에 '' 값을 넣으면 0 이나 NULL 로 저장하는 방법
본문
카페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