Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL ERROR 1406 ठीक करें: "Data too long for column" लेकिन ऐसा नहीं होना चाहिए?


कारण और समाधान

यह त्रुटि तब होती है जब आप किसी कॉलम में उसकी अनुमत सीमा से बड़ा डेटा डालने का प्रयास करते हैं। एक सामान्य कारण: 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) त्रुटि व्यवहार को प्रभावित करता है।
  1. Java MySQL कनेक्शन में कनेक्टिविटी त्रुटि कैसे ठीक करें - कनेक्टर को क्लासपथ में सेट करें Java MySQL कनेक्शन में कनेक्टिविटी त्रुटि कैसे ठीक करें - कनेक्टर को क्लासपथ में सेट करें

    Java में MySQL कनेक्टर (JDBC ड्राइवर) को क्लासपथ में जोड़कर कनेक्टिविटी त्रुटि ठीक की जाती है। IDE में JAR फ़ाइल इम्पोर्ट करें या कमांड लाइन पर -cp विकल्प का उपयोग करें। समस्या ClassNotFoundException: com.mysql.cj.jdbc.Driver या No suitable driver found for jdbc:mysql://... समाधान: क्लासपथ में JAR

  1. - विशिष्ट कॉलम मानों के लिए एकल MySQL क्वेरी में एकाधिक काउंट प्राप्त करें

    इसके लिए, आप विशिष्ट कॉलम के लिए पैरामीटर मान के साथ एग्रीगेट फंक्शन SUM() का उपयोग कर सकते हैं। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1790 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Score int ); Query OK, 0 rows affected (0.94 sec) इन्सर्ट कमा

  1. - MySQL में एक क्वेरी में सभी कॉलम नामों के लिए उपनाम (alias) कैसे सेट करें

    सिंटैक्स SELECT yourColumnName1 AS aliasName1, yourColumnName2 AS aliasName2 FROM yourTableName AS tableAlias; उदाहरण टेबल बनाएं: ); डेटा डालें: INSERT INTO DemoTable2014 VALUES (Chris, Brown); उपनाम के साथ क्वेरी FROM DemoTable2014 tbl; परिणाम +------------------+-----------------+ | Studen