2012-10-01 3 views
5

내가했습니다 columns'charset와 오래 된 DB가MySQL의 오류 (150)는

이제

내가 UTF8에서 전체 DB를 변경하기 위해 노력하고있어 latin1에 위해 이름을 변경, 내가 모든 테이블을 변경하는 스크립트를했습니다 이 같은 UTF8이 같은

ALTER TABLE `mytable` CHARACTER SET utf8; 

모든 열 :

01 :
ALTER TABLE `mytable` CHANGE `mycolumn` `mycolumn` varchar(200) CHARACTER SET utf8; 

그러나 일부 열에

(기본 키 및 제약, 내가 추측이)이 오류를 받고 있어요
Error on rename of './test/#sql-5028_217b96' to './test/mytable' (errno: 150) 

누구나이 문제를 해결하는 방법을 알고 있습니까?

답변

9

대부분 mycolumn은 외래 키의 일부입니다. 그렇다면 제약 조건을 제거한 다음 기본/외래 키 유형을 모두 변경 한 다음 제약 조건을 다시 추가해야합니다.

+0

방금 ​​비슷한 문제가 발생했습니다 ('INT'에서 'BIGINT'로 이동). 필자는 테이블 (변경해야하는 컬럼에 외래 키 제약 조건이 있음)과 그 내용을 복제하고 문제없이 복제 테이블의 컬럼 유형을 변경 한 다음 원래 테이블을 복제 테이블로 교체하기로 결정했습니다. 그것은 위험한 일입니까? – tylerl

+0

@tylerl 아니요, 변경하는 동안 원본 테이블의 데이터가 변경되지 않은 경우입니다. 그렇지 않으면 데이터 손실/불일치가 발생할 수 있습니다. –

+0

그래, 내 애플 리케이션에서 물건을 부러 뜨 것으로 믿습니다 ... 테이블 (내가 맥에서 Sequel Pro를 사용하고 있어요) 중복되었을 때 뭔가 이상해야 오른쪽 복사해야합니다? 나는 어떤 데이터도 잃어 버리지 않았다고 생각하지만, 갑자기 내 서버는 더 이상 특정 테이블에 데이터를 저장하는 것처럼 느껴지지 않았습니다! 이상한 ... 문제는 해당 필드가 특정 테이블의 외래 키 였지만 FK 제약 조건을 찾을 수 없다는 메모를 작성한 것입니다. Grrrr .... – tylerl