2012-10-24 2 views
1

고유 인덱스를 추가하려고하는 테이블이 있습니다. 문제는 스크립트를 설정하여 데이터를 삽입하는 방식인데 경우에 따라 NULL 대신 빈 문자열을 사용하게됩니다.MySQL에서 빈 문자열을 NULL 값으로 자동 변환하는 방법이 있습니까?

그래서, 옆으로 (나는 누군가가 저를 저장하지 않는! 필요한 것을 예견) 스크립트를 변경하지 .... 빈 문자열이를 통해 자동으로 사용 NULL 값 전달 할 수있는 경우 MySQL은 어떤 설정이 있습니다 고유 키?

+0

이 솔루션은 업데이트를 수행하므로 다음 개념을 적용 할 수 있습니다. http://stackoverflow.com/questions/3238319/how-do-i-change-all-empty-strings-to-null-in- a-table –

+0

무엇이든 테이블 식으로 설정할 수 있습니까? 아니면 처음으로 제대로 할 수 있습니까?이 문제는 생기지 않습니다. –

+0

다른 방법으로 사용하지 마십시오. 허용하지 마십시오. null로 설정하고 기본값을 빈 문자열로 설정 하시겠습니까? – sn00k4h

답변

5

가져 오기 스크립트를 해결할 수없는 경우에 당신이 입하기 전에 물건을 패치 트리거를 사용할 수 있어야 또는 업데이트에 도착 같은 시도 탁자. 이런 식으로 뭔가 트릭을 수행해야합니다

여기
delimiter $$ 
create trigger nullify_blanks_ins before insert on your_table 
for each row begin 
    if new.string = '' then 
     set new.string = null; 
    end if; 
end; 
$$ 
create trigger nullify_blanks_upd before update on your_table 
for each row begin 
    if new.string = '' then 
     set new.string = null; 
    end if; 
end; 
$$ 
delimiter ; 

new은 행이 그래서 당신은 쓰레기 값을보고이를 해결할 수 완료된 삽입 또는 업데이트 후 어떻게 보일까를 말합니다. 그런 다음 BEFORE 트리거이므로 패치 된 행은 데이터베이스로 이동합니다. 물론 상황에 맞게 테이블 (your_table)과 열 (string)을 변경해야합니다.

0

SET sn=NULLIF(sn,NULL); 

또는

UPDATE Table 
    SET demo = CASE demo = ' ' THEN NULL ELSE demo END, 
    ... 
+0

고유 인덱스를 삭제하고 데이터를 삽입하고 업데이트를 수행 한 다음 고유 인덱스를 다시 추가하여 작동하지 않겠습니까? –

+0

@muistooshort 물론 고유 색인이있는 경우 여러 개의 빈 문자열을 가질 수 없습니다. –

관련 문제