2012-06-27 6 views
1

다음 문제/질문에 대한 답을 찾을 수 없습니다.ENUM 유형에 대한 제한 사항이 충분하지 않습니까?

데이터베이스를 만들었으며 필드 중 하나가 ENUM 유형이고 제한이 NULL이 아닙니다.

잘 작동하지만이 필드에 허용되지 않는 값으로 레코드를 삽입하려고하면 레코드가 거부되지 않지만 어쨌든 필드가 비어있는 상태로 삽입됩니다. 즉, NOT NULL 제한을 추가 했으므로 빈 문자열 ("")이라고 생각합니다.

전체적으로 거부 된 기록을 원합니다. 그것을 어떻게 성취 할 수 있습니까?

일반적인 지식이므로 샘플 코드가 필요하지 않다고 가정합니다.

+0

PHP 또는 Python을 사용하고 계십니까? 아니면 정확히 mySQL입니까 – Hituptony

답변

1

잘못된 값을 ENUM 열에 삽입하거나 IGNORE로 ENUM 열로 값을 입력하면 문자열 열거 형에 빈 문자열로 표시되는 예약 된 열거 형 값 0으로 설정됩니다.

http://dev.mysql.com/doc/refman/5.1/en/constraint-enum.html

이 시도 :

SET sql_mode = 'STRICT_ALL_TABLES'; or STRICT_TRANS_TABLES 

를 테이블 트랜잭션 또는 비 트랜잭션 경우에 따라. 이 방법은 mySQL을 통해 처리하고 메서드가 작동을 시도하기 전에 무결성 제약 조건을 사용하여 중단하고 롤백하도록해야합니다.

+0

대답을 선택 하시겠습니까 ...이 작업을 수행 했습니까? – Hituptony

0

mysql에서 엄격 모드를 사용해야 함을 발견했습니다. 당신이해야이 작업을 수행하려면 :

  1. 편집
  2. 추가/편집 SQL 모드
  3. /etc/mysql/my.cnf = STRICT_ALL_TABLES
  4. 를 다시 시작 MySQL의

을이 MySQL의 수준에서 솔루션입니다. ENUM 필드에 빈 값을 삽입하면 이제 거부됩니다.

+0

세션마다 SQL 모드를 설정할 수 있습니다. SET @@ session.sql_mode = ''. SQL 모드를 전역 적으로 활성화하려면 MySQL을 다시 시작할 필요가 없습니다. SET @@ global.sql_mode = ''. 옵션 파일 (my.cnf)에 추가하면 나중에 다시 시작할 때 영구적으로 유지됩니다. – geertjanvdk

+0

두 답변에 감사드립니다. 그것은 작동합니다! André – eengebruiker

관련 문제