कारण और समाधान
यह त्रुटि तब होती है जब आप किसी कॉलम में उसकी अनुमत सीमा से बड़ा डेटा डालने का प्रयास करते हैं। एक सामान्य कारण: BIT डेटा प्रकार के कॉलम में स्ट्रिंग ('1' या '0') डालना बजाय बिट लिटरल के।
BIT कॉलम के लिए सही सिंटैक्स
-- सही: b प्रीफिक्स के साथ बिट लिटरल anyBitColumnName = b'1' -- या b'0' -- गलत: स्ट्रिंग लिटरल anyBitColumnName = '1' -- ERROR 1406 का कारण बनता है
व्यावहारिक उदाहरण
टेबल बनाना (BIT कॉलम के साथ)
mysql> CREATE TABLE ErrorDemo (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(10),
isStudent BIT,
PRIMARY KEY(Id)
);
डेटा डालना (1 और 0 के साथ)
mysql> INSERT INTO ErrorDemo(Name, isStudent) VALUES('John', 1);
mysql> INSERT INTO ErrorDemo(Name, isStudent) VALUES('Sam', 0);
-- ... और अधिक रिकॉर्ड
गलत UPDATE (त्रुटि का कारण)
mysql> UPDATE ErrorDemo SET isStudent = '1' WHERE Id = 9; ERROR 1406 (22001): Data too long for column 'isStudent' at row 1
सही UPDATE (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 | David | | +----+---------+-----------+
नोट: BIT मान ग्रिड में खाली/रिक्त दिख सकते हैं लेकिन संग्रहीत होते हैं।
0 से अपडेट करना
mysql> UPDATE ErrorDemo SET Name = 'Maxwell', isStudent = b'0' WHERE Id = 9; mysql> SELECT * FROM ErrorDemo WHERE Id = 9;
+----+---------+-----------+ | Id | Name | isStudent | +----+---------+-----------+ | 9 | Maxwell | | +----+---------+-----------+
अन्य सामान्य कारण
| कारण | समाधान |
|---|---|
| VARCHAR लंबाई से अधिक स्ट्रिंग | कॉलम आकार बढ़ाएं या डेटा ट्रिम करें |
| DECIMAL सटीकता/स्केल से बाहर मान | DECIMAL(M,D) को उपयुक्त मानों में बदलें |
| ENUM/SET में अमान्य मान | केवल परिभाषित मानों का उपयोग करें |
| स्ट्रिक्ट SQL मोड (STRICT_TRANS_TABLES) | चेतावनी के बजाय त्रुटि फेंकता है; डेटा मान्य करें |
मुख्य बिंदु
- BIT कॉलम के लिए हमेशा
b'0'याb'1'लिटरल का उपयोग करें। SHOW CREATE TABLEसे कॉलम परिभाषा जांचें।- स्ट्रिक्ट मोड (
@@sql_mode) त्रुटि व्यवहार को प्रभावित करता है।