내 삽입 문은 다음과 같습니다빈 문자열이 아닌 널 (null)
INSERT INTO foo (bar) VALUES ('');
bar
필드과 같이 생성 :
bar INT(11)
COLLATION: (NULL)
NULL: YES
DEFAULT: (NULL)
MySQL 버전 : 5.1.
빈 문자열에 NULL을 삽입하면 안됩니까? 나는 왜 테이블에 제로 (0)가 저장되어 있는지 알지 못합니다.
내 삽입 문은 다음과 같습니다빈 문자열이 아닌 널 (null)
INSERT INTO foo (bar) VALUES ('');
bar
필드과 같이 생성 :
bar INT(11)
COLLATION: (NULL)
NULL: YES
DEFAULT: (NULL)
MySQL 버전 : 5.1.
빈 문자열에 NULL을 삽입하면 안됩니까? 나는 왜 테이블에 제로 (0)가 저장되어 있는지 알지 못합니다.
MySQL은 기본적으로 잘못된 값을 올바른 형식으로 강제 변환하려고 시도합니다. 여기서 빈 문자열 ''
은 string 유형이며 정수가 아니고 NULL도 아닙니다. 나는 다음과 같은 조치를 취하시기 바랍니다 :
INSERT INTO foo (bar) VALUES (NULL);
# 2는 많이 설명합니다. 고맙습니다. – gravyface
엄격 모드는 매우 중요합니다. MySQL의 기본값은 엉뚱한 데이터에 기대어 있습니다. 개발자는 데이터를 자르지 않고 인식하고 있습니까? 아야. –
테이블에 NULL
을 삽입하지 않았습니다. 빈 문자열을 삽입하는 것입니다 (이는 분명히 0으로 매핑됩니다). NULL
은 SQL의 고유 한 값이라는 것을 기억하십시오. NULL != ''
. 어떤 값 (NULL
제외)을 지정하면 NULL
이 삽입되지 않습니다. 값을 지정하지 않으면 기본값 만 사용됩니다. 귀하의 예제에서 정수 열에 문자열 값을 지정했습니다.
이 작업을 수행하는 방법은 필드를 전혀 채우지 않는 것입니다. 실제로 가치가 필요한 것만 채우십시오.
왜 NULL이어야합니까? 정수 표현이있는 값을 제공하고 있습니다. 빈 문자열은 INT
0
으로 변환됩니다.
을 제공하지 않은 경우에만 값이 기본값이됩니다.
또한 mysql "strict mode" –