Có khá một vài điều mà có thể gây ra errno 150, vì vậy đối với những người tìm kiếm chủ đề này, đây là những gì tôi nghĩ là một gần danh sách đầy đủ (nguồn Causes of Errno 150):
Đối với errno 150 hoặc errno 121, chỉ cần gõ vào SHOW ENGINE INNODB STATUS, có một phần được gọi là "L FORI L FORI NƯỚC NGOÀI MỚI NHẤT". Theo đó, nó sẽ cung cấp cho bạn một thông báo lỗi rất hữu ích, thông thường sẽ cho bạn biết ngay lập tức vấn đề là gì. Bạn cần đặc quyền SUPER để chạy nó, vì vậy nếu bạn không có điều đó, bạn sẽ chỉ phải kiểm tra các kịch bản sau đây.
1) Các loại dữ liệu không khớp nhau: Các loại của các cột phải cùng
2) Cột Chánh Không Indexed (Hoặc Indexed trong thứ tự sai)
3) Cột Collations Don' t trận đấu
4) Sử dụng SET NULL trên một cột NOT NULL
5) Bảng collations Đừng Phù hợp: ngay cả khi trận đấu collations cột, trên một số phiên bản MySQL này có thể là một vấn đề.
6) Cột gốc không thực sự tồn tại trong bảng cha. Kiểm tra chính tả (và có thể là khoảng trống ở đầu hoặc cuối cột)
7) Một trong các chỉ mục trên một cột không đầy đủ hoặc cột quá dài để có chỉ mục đầy đủ. Lưu ý rằng MySQL (trừ khi bạn tinh chỉnh nó) có độ dài khóa cột đơn tối đa là 767 byte (tương ứng với cột UTM (255) UTF)
Trong trường hợp bạn gặp lỗi 121, dưới đây là một số nguyên nhân:
1) tên hạn chế bạn chọn đã được sử
2) trên một số hệ thống nếu có một sự khác biệt trường hợp trong bản tuyên Bố và bảng tên của bạn. Điều này có thể cắn bạn nếu bạn đi từ một máy chủ khác có quy tắc xử lý trường hợp khác nhau.
tôi đã tìm thấy rằng các cột phải giống hệt nhau (ngay cả những cờ chưa ký phải khớp). –
Đối với cơ bản tất cả các nguyên nhân của lỗi này, đây là một nguồn lực đầy đủ cho những gì gây ra errno 150 (và errno 121/lỗi khóa ngoài nước ngoài khác) trong MySQL. –
@JohnSmith ... ở đâu? –