2012-10-01 23 views
5

Ben ettik columns'charset ile eski dbMySQL hata 150

Şimdi

i utf8 bütün db değiştirmeye çalışıyorum latin1 için adlandırmak i tüm tabloları değiştirmek için bir komut dosyası yaptık böyle utf8: böyle

ALTER TABLE `mytable` CHARACTER SET utf8; 

ve tüm sütunlar:

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

Ancak bazı sütunlarda

(birincil anahtarlar ve kısıtlamalar, sanırım) ben bu hatayı alıyorum
Error on rename of './test/#sql-5028_217b96' to './test/mytable' (errno: 150) 

Bunu nasıl halledeceğinizi bilen var mı?

cevap

9

Sizin büyük olasılıkla, mycolumn, bir yabancı anahtarın bir parçasıdır. Eğer öyleyse, kısıtlamayı kaldırmanız, ardından hem birincil/yabancı anahtar için türü değiştirip sonra da kısıtlama eklemeniz gerekir.

+0

Benzer bir soruna rastladım (bir INT'den "BIGINT" e geçiyor). Tabloyu (değiştirmem gereken sütunda yabancı bir anahtar kısıtlaması vardı) ve içeriğini çoğaltmaya karar verdim, çoğaltılamaz tablodaki sütun türünü sorun olmadan değiştirdikten sonra orijinal tabloyu yinelenen tabloyla değiştirdim. Bu tehlikeli bir şey mi? – tylerl

+0

@tylerl Hayır, orijinal tablodaki veriler değişiklikleriniz sırasında değişmeden kalır. Aksi halde veri kaybı/tutarsızlığı olabilir. –

+0

Evet. Uygulamamda bazı şeyleri kırdığına inanıyorum ... Tablo tekrarlandığında bir şey doğru kopyalanmamış olmalıdır (Mac'te Sequel Pro kullanıyorum)? Herhangi bir verinin kaybolduğunu düşünmüyorum, ama birdenbire sunucum artık verileri belli bir masaya kaydetmekten hoşlanmadı! Garip ... Sorun şu ki, söz konusu alanın belirli bir tabloda yabancı bir anahtar olduğunu not etmiştim ama FK kısıtını bulamıyorum! Grrrr .... – tylerl