ข้อผิดพลาดนี้เกิดขึ้นเมื่อพยายามเก็บข้อมูลเกินขีดจำกัดที่อนุญาต ตัวอย่างเช่น ไม่สามารถเก็บสตริงในคอลัมน์ชนิด BIT ได้ เนื่องจาก VARCHAR/String ใช้ขนาดมากกว่า BIT
รูปแบบที่ถูกต้องสำหรับคอลัมน์ BIT
anyBitColumnName = b'1' OR anyBitColumnName = b'0'
ต้องเติมคำนำหน้า b นำหน้าค่า
ตัวอย่างข้อผิดพลาดและวิธีแก้
สร้างตาราง (สมมติคอลัมน์ isStudent เป็น BIT):
mysql> CREATE TABLE ErrorDemo ( Id INT NOT NULL AUTO_INCREMENT, Name VARCHAR(10), isStudent BIT, PRIMARY KEY(Id) ); Query OK, 0 rows affected (0.70 sec)
เพิ่มข้อมูล (ใช้ตัวเลข 0, 1 โดยตรง):
mysql> INSERT INTO ErrorDemo(Name,isStudent) VALUES('John',1); Query OK, 1 row affected (0.18 sec)
... (เพิ่มข้อมูล 10 แถว) ...
พยายาม UPDATE ด้วยสตริง '1':
mysql> UPDATE ErrorDemo SET isStudent='1' WHERE Id=9; ERROR 1406 (22001): Data too long for column 'isStudent' at row 1
วิธีแก้: ใส่ b นำหน้า:
mysql> UPDATE ErrorDemo SET isStudent=b'1' WHERE Id=9; Query OK, 0 rows affected (0.00 sec)
ตรวจสอบข้อมูล:
mysql> SELECT * FROM ErrorDemo WHERE Id=9; +----+---------+-----------+ | Id | Name | isStudent | +----+---------+-----------+ | 9 | Maxwell | 1 | +----+---------+-----------+
อัปเดตเป็น 0:
mysql> UPDATE ErrorDemo SET Name='Maxwell', isStudent=b'0' WHERE Id=9; Query OK, 1 row affected (0.16 sec)
สรุป: สำหรับคอลัมน์ BIT ต้องใช้ literal format b'0' หรือ b'1' ไม่ใช่สตริง '0' หรือ '1'