2012-10-01 47 views
5

我有一箇舊的數據庫與columns'charset爲latin1MySQL錯誤150重新命名

現在,我試圖改變在UTF8整個分貝,我做了一個腳本來改變所有表UTF8這樣的:

ALTER TABLE `mytable` CHARACTER SET utf8; 

和所有列是這樣的:

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

是的,我相信它破壞了我應用程序中的東西......當表格被複制時(我在Mac上使用Sequel Pro),一定不能複製右邊的東西?我不認爲有任何數據丟失,但突然間我的服務器不再想要將數據保存到特定的表格了!奇怪......問題是我已經記下了這個字段是一個特定表中的外鍵,但是我找不到FK約束! Grrrr .... – tylerl