Tôi đã có một db cũ với cột'charset sang latin1Lỗi Mysql 150 khi đổi tên cột
Bây giờ tôi đang cố gắng thay đổi toàn bộ db trong utf8, tôi đã tạo một kịch bản để thay đổi tất cả các bảng trong utf8 như thế này:
ALTER TABLE `mytable` CHARACTER SET utf8;
và tất cả các cột như thế này:
ALTER TABLE `mytable` CHANGE `mycolumn` `mycolumn` varchar(200) CHARACTER SET utf8;
Nhưng trên một số cột (khóa chính và những hạn chế, tôi đoán) tôi nhận được lỗi này:
Error on rename of './test/#sql-5028_217b96' to './test/mytable' (errno: 150)
Bất kỳ ai biết cách giải quyết vấn đề này?
Tôi vừa gặp phải vấn đề tương tự (chuyển từ 'INT' sang' BIGINT'). Tôi quyết định nhân đôi bảng (trong đó có một ràng buộc khoá ngoại trên cột mà tôi cần thay đổi) và nội dung của nó, thay đổi kiểu cột trong bảng trùng lặp mà không có vấn đề, và sau đó thay thế bảng gốc bằng bảng trùng lặp. Đó có phải là một điều nguy hiểm để làm không? – tylerl
@tylerl Không, nếu dữ liệu trên bảng gốc vẫn không thay đổi trong các thay đổi của bạn. Nếu không, bạn có thể bị mất dữ liệu/không thống nhất. –
Vâng tôi tin rằng nó đã phá vỡ mọi thứ trong ứng dụng của tôi ... Một cái gì đó phải không được sao chép trên bên phải khi bảng được nhân đôi (tôi đang sử dụng phần mềm Pro trên máy Mac)? Tôi không nghĩ rằng bất kỳ dữ liệu nào bị mất, nhưng đột nhiên máy chủ của tôi không cảm thấy muốn lưu dữ liệu vào một bảng cụ thể nữa! Lạ thật ... Vấn đề là tôi đã lưu ý rằng trường được đề cập là khóa ngoại trong một bảng cụ thể, nhưng tôi không thể tìm thấy ràng buộc FK! Grrrr .... – tylerl