2012-10-01 34 views
5

Tengo una vieja db con columns'charset a LATIN1error de MySQL 150 en la columna renombrar

Ahora estoy tratando de cambiar todo el db en UTF8, he hecho un script para cambiar todas las tablas utf8 como esto:

ALTER TABLE `mytable` CHARACTER SET utf8; 

y todas las columnas como esta:

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

Pero en algunas columnas (claves primarias y las limitaciones, supongo) que estoy recibiendo este error:

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

¿Alguien sabe cómo evitar esto?

Respuesta

9

Lo más probable es que su mycolumn forme parte de una clave externa. Si es así, debe eliminar la restricción, luego cambiar el tipo para la clave principal/extranjera y luego agregar la restricción nuevamente.

+0

Acabo de encontrarme con un problema similar (pasar de 'INT' a' BIGINT'). Decidí duplicar la tabla (que tenía una restricción de clave externa en la columna que necesitaba cambiar) y su contenido, cambiar el tipo de columna en la tabla duplicada sin problema y luego reemplazar la tabla original con la tabla duplicada. ¿Es eso algo peligroso de hacer? – tylerl

+0

@tylerl No, si los datos en la tabla original permanecen sin cambios durante sus cambios. De lo contrario, puede tener pérdida de datos/incoherencia. –

+0

Sí, creo que rompió las cosas en mi aplicación ... Algo no debe haberse copiado correctamente cuando la tabla estaba duplicada (estoy usando Sequel Pro en una Mac)? No creo que se haya perdido ningún dato, ¡pero de repente mi servidor ya no tenía ganas de guardar datos en una mesa en particular! Extraño ... ¡El problema es que había anotado que el campo en cuestión era una clave externa en una tabla en particular, pero no puedo encontrar la restricción FK! Grrrr .... – tylerl

Cuestiones relacionadas