Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

แก้ไขข้อผิดพลาด MySQL 1406:ข้อมูลยาวเกินไปสำหรับคอลัมน์” แต่ไม่ควรเป็นเช่นนั้น


ข้อผิดพลาดนี้อาจเกิดขึ้นได้หากคุณพยายามตั้งค่าข้อมูลที่สูงกว่าขีดจำกัดที่อนุญาต ตัวอย่างเช่น คุณไม่สามารถเก็บสตริงในคอลัมน์ประเภทบิตได้ เนื่องจาก varchar หรือสตริงนั้นใช้ขนาดที่สูงกว่าประเภทข้อมูลบิต

คุณต้องใช้ไวยากรณ์ต่อไปนี้สำหรับคอลัมน์ประเภทบิต:

anyBitColumnName=b ‘1’ORanyBitColumnName=b ‘0’

เพื่อให้เข้าใจไวยากรณ์ข้างต้น ให้เราสร้างตาราง แบบสอบถามเพื่อสร้างตารางมีดังนี้:

mysql> สร้างตาราง IncasesensitiveDemo -> ( -> Id int NOT NULL AUTO_INCREMENT, -> Name varchar(10), -> PRIMARY KEY(Id) -> );Query OK, 0 แถวได้รับผลกระทบ (0.70 วินาที) 

แทรกบางระเบียนในตารางโดยใช้คำสั่งแทรก แบบสอบถามที่จะแทรกบันทึกมีดังนี้:

mysql> แทรกลงใน ErrorDemo(Name,isStudent) values('John',1);Query OK, 1 แถวได้รับผลกระทบ (0.18 วินาที)mysql> แทรกลงใน ErrorDemo(Name,isStudent) values('Sam',0);แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.21 วินาที)mysql> แทรกลงใน ErrorDemo(ชื่อ,isStudent) ค่า ('ไมค์',0);แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.16 วินาที)mysql> แทรกลงใน ErrorDemo (ชื่อ, isStudent) ค่า ('Larry',1); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.23 วินาที) mysql> แทรกลงใน ErrorDemo (ชื่อ, isStudent) ค่า ('Carol', 1); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.11 วินาที) mysql> แทรกลงในค่า ErrorDemo(Name,isStudent) ('Robert',0);Query OK, 1 แถวได้รับผลกระทบ (0.17 วินาที)mysql> แทรกลงใน ErrorDemo(Name,isStudent) values('James',1); Query OK, 1 แถวที่ได้รับผลกระทบ (0.18 วินาที) mysql> แทรกลงใน ErrorDemo (ชื่อ, isStudent) ค่า ('Bob', 1); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.19 วินาที) mysql> แทรกลงใน ErrorDemo (ชื่อ, isStudent) ค่า ('David' ,1);แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.15 วินาที)mysql> แทรกลงใน ErrorDemo(ชื่อ,isStudent) ค่า ('Ricky',0);แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.17 วินาที)

แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select แบบสอบถามมีดังนี้:

mysql> เลือก *จาก ErrorDemo;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+---------+-----------+| รหัส | ชื่อ | isStudent |+----+-------+-----------+| 1 | จอห์น | || 2 | แซม | || 3 | ไมค์ | || 4 | แลร์รี่ | || 5 | แครอล | || 6 | โรเบิร์ต | || 7 | เจมส์ | || 8 | บ๊อบ | || 9 | เดวิด | || 10 | ริกกี้ | |+----+--------+-----------+10 แถวในชุด (0.00 วินาที)

สแน็ปช็อตเอาต์พุตตัวอย่างจริงมีดังนี้:

แก้ไขข้อผิดพลาด MySQL 1406:ข้อมูลยาวเกินไปสำหรับคอลัมน์” แต่ไม่ควรเป็นเช่นนั้น

ข้อผิดพลาดมีดังต่อไปนี้ตามที่กล่าวไว้ข้างต้น มันถูกสร้างขึ้นในแบบสอบถามด้านล่าง:

mysql> อัปเดต ErrorDemo ชุด isStudent='1' โดยที่ Id=9;ERROR 1406 (22001):ข้อมูลยาวเกินไปสำหรับคอลัมน์ 'isStudent' ที่แถว 1

เพื่อหลีกเลี่ยงข้อผิดพลาดข้างต้น คุณต้องเติมคำนำหน้า b ก่อน '1' ตอนนี้แบบสอบถามมีดังนี้:

mysql> อัปเดต ErrorDemo ชุด isStudent=b'1' โดยที่ Id=9;Query OK, 0 แถวได้รับผลกระทบ (0.00 วินาที) แถวที่ตรงกัน:1 เปลี่ยนแปลง:0 คำเตือน:0

ตรวจสอบระเบียนตารางอีกครั้งโดยใช้คำสั่ง select แบบสอบถามมีดังนี้:

mysql> เลือก *จาก ErrorDemo;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+---------+-----------+| รหัส | ชื่อ | isStudent |+----+-------+-----------+| 1 | จอห์น | || 2 | แซม | || 3 | ไมค์ | || 4 | แลร์รี่ | || 5 | แครอล | || 6 | โรเบิร์ต | || 7 | เจมส์ | || 8 | บ๊อบ | || 9 | เดวิด | || 10 | ริกกี้ | |+----+--------+-----------+10 แถวในชุด (0.00 วินาที)

สแน็ปช็อตเอาต์พุตตัวอย่างจริงมีดังนี้:

แก้ไขข้อผิดพลาด MySQL 1406:ข้อมูลยาวเกินไปสำหรับคอลัมน์” แต่ไม่ควรเป็นเช่นนั้น

ดูที่คอลัมน์ is Student

ตอนนี้เราจะอัปเดต id เดียวกันกับค่า 0 ซึ่งจะให้ค่าว่างกับ Id ที่เกี่ยวข้อง แบบสอบถามมีดังนี้:

mysql> อัปเดต ErrorDemo set Name='Maxwell', isStudent=b'0' โดยที่ Id=9;Query OK, 1 แถวได้รับผลกระทบ (0.16 วินาที) แถวที่ตรงกัน:1 เปลี่ยนแปลง:1 คำเตือน:0

ตรวจสอบบันทึกของแถวใดแถวหนึ่งที่อัปเดตด้านบน นี่คือรหัส 9 ตอนนี้แถวได้รับการอัปเดตด้วยบันทึก Id 9 การสืบค้นมีดังนี้:

mysql> เลือก *จาก ErrorDemo โดยที่ Id=9;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+---------+-----------+| รหัส | ชื่อ | isStudent |+----+---------+-----------+| 9 | แม็กซ์เวลล์ | |+----+---------+----------- +1 แถวในชุด (0.00 วินาที)