มีบางสิ่งบางอย่างที่สามารถทำให้ errno 150 ได้ดังนั้นสำหรับผู้ที่ค้นหาหัวข้อนี้นี่คือสิ่งที่ฉันคิดว่าใกล้เคียงกับรายการครบถ้วนสมบูรณ์ ( สาเหตุที่มาของ Errno 150 ):
สำหรับ errno 150 หรือ errno 121 เพียงพิมพ์ใน SHOW ENGINE INNODB STATUS มีส่วนที่เรียกว่า "LATEST KEY ERROR KEY ล่าสุด" ภายใต้มันจะให้ข้อความแสดงข้อผิดพลาดที่มีประโยชน์มากซึ่งโดยทั่วไปจะบอกคุณทันทีว่าเกิดอะไรขึ้น คุณต้องมีสิทธิ์พิเศษในการใช้งานดังนั้นหากคุณไม่มีคุณจะต้องทดสอบสถานการณ์ต่อไปนี้
1) ประเภทข้อมูลไม่ตรงกัน: ประเภทของคอลัมน์จะต้องเหมือนกัน
2) คอลัมน์หลักที่ไม่ได้จัดทำดัชนี (หรือจัดทำดัชนีตามลำดับที่ไม่ถูกต้อง)
3) การเรียงคอลัมน์ไม่ตรงกัน
4) การใช้ SET NULL ในคอลัมน์ NOT NULL
5) การจัดเรียงตารางไม่ตรงกัน: แม้ว่าการเรียงคอลัมน์จะตรงกัน แต่ใน MySQL บางรุ่นอาจเป็นปัญหาได้
6) คอลัมน์ผู้ปกครองไม่มีอยู่จริงในตารางหลัก ตรวจสอบตัวสะกด (และอาจเว้นวรรคที่ต้นหรือท้ายคอลัมน์)
7) ดัชนีหนึ่งในคอลัมน์ใดคอลัมน์หนึ่งไม่สมบูรณ์หรือคอลัมน์ยาวเกินไปสำหรับดัชนีที่สมบูรณ์ โปรดทราบว่า MySQL (เว้นแต่คุณจะปรับแต่งมัน) มีความยาวสูงสุดของคีย์คอลัมน์เดี่ยวสูงสุด 767 ไบต์ (ซึ่งตรงกับคอลัมน์ varchar (255) UTF)
ในกรณีที่คุณได้รับ errno 121 ต่อไปนี้เป็นสาเหตุสองประการ:
1) ชื่อข้อ จำกัด ที่คุณเลือกนั้นถูกใช้ไปแล้ว
2) ในบางระบบหากมีกรณีที่แตกต่างกันในคำสั่งและชื่อตารางของคุณ สิ่งนี้อาจกัดคุณได้หากคุณไปจากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่นที่มีกฎการจัดการเคสที่แตกต่างกัน