2012-10-01 11 views
5

mam stary db z columns'charset do latin1błąd Mysql 150 na kolumnie przemianować

Teraz staram się zmienić cały dB utf8, zrobiłem skrypt do zmiany wszystkich tabel w utf8 tak:

ALTER TABLE `mytable` CHARACTER SET utf8; 

i wszystkie kolumny takie jak to:

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

Ale w niektórych kolumnach (podstawowe klucze i ograniczeń, chyba) i dostaję ten błąd:

Error on rename of './test/#sql-5028_217b96' to './test/mytable' (errno: 150) 

Ktoś wie, jak sobie z tym poradzić?

Odpowiedz

9

Najprawdopodobniej Twój mycolumn jest częścią klucza obcego. Jeśli tak, musisz usunąć ograniczenie, a następnie zmienić typ dla klucza podstawowego/obcego, a następnie ponownie dodać ograniczenie.

+0

Po prostu wpadłem na podobny problem (przechodząc od "INT" do "BIGINT"). Zdecydowałem się zduplikować tabelę (która zawierała ograniczenie klucza obcego w kolumnie, którą trzeba było zmienić) i jej zawartość, zmienić typ kolumny w duplikowanej tabeli bez problemu, a następnie zastąpić oryginalną tabelę duplikową tabelą. Czy to jest niebezpieczne? – tylerl

+0

@tylerl Nie, jeśli dane w oryginalnej tabeli pozostają niezmienione podczas wprowadzania zmian. W przeciwnym razie możesz utracić/niespójność danych. –

+0

Tak, wierzę, że to wszystko zepsuło się w mojej aplikacji ... Coś musiało nie zostać skopiowane, gdy stół został skopiowany (używam Sequel Pro na Macu)? Nie sądzę, aby jakiekolwiek dane zostały utracone, ale nagle mój serwer nie chciał już zapisywać danych w konkretnym stole! Dziwne ... Problem polega na tym, że zanotowałem, że dane pole było obcym kluczem w konkretnej tabeli, ale nie mogę znaleźć ograniczenia FK! Grrrr .... – tylerl

Powiązane problemy