কম্পিউটার টিউটোরিয়াল

MySQL ERROR 1406 সমাধান: "Data too long for column" কিন্তু হওয়া উচিত নয়

এই এরর ঘটে যখন আপনি অনুমোদিত সীমার চেয়ে বড় ডেটা সেট করার চেষ্টা করেন। উদাহরণস্বরূপ, আপনি BIT টাইপের কলামে স্ট্রিং সংরক্ষণ করতে পারবেন না কারণ VARCHAR বা স্ট্রিং BIT ডেটা টাইপের চেয়ে বেশি সাইজ নেয়।

BIT টাইপ কলামের জন্য নিচের সিনট্যাক্স ব্যবহার করতে হবে:

anyBitColumnName= b'1' OR anyBitColumnName= b'0'

এটি বুঝতে একটি টেবিল তৈরি করা যাক। টেবিল তৈরির কোয়েরি:

mysql> create table IncasesensitiveDemo  
    -> (  
    -> Id int NOT NULL AUTO_INCREMENT,  
    -> Name varchar(10),  
    -> PRIMARY KEY(Id)  
    -> ); Query OK, 0 rows affected (0.70 sec)

ইনসার্ট কমান্ড দিয়ে কিছু রেকর্ড ইনসার্ট করা যাক। রেকর্ড ইনসার্ট করার কোয়েরি:

mysql> insert into ErrorDemo(Name,isStudent) values('John',1); Query OK, 1 row affected (0.18 sec) mysql> insert into ErrorDemo(Name,isStudent) values('Sam',0); Query OK, 1 row affected (0.21 sec) mysql> insert into ErrorDemo(Name,isStudent) values('Mike',0); Query OK, 1 row affected (0.16 sec) mysql> insert into ErrorDemo(Name,isStudent) values('Larry',1); Query OK, 1 row affected (0.23 sec) mysql> insert into ErrorDemo(Name,isStudent) values('Carol',1); Query OK, 1 row affected (0.11 sec) mysql> insert into ErrorDemo(Name,isStudent) values('Robert',0); Query OK, 1 row affected (0.17 sec) mysql> insert into ErrorDemo(Name,isStudent) values('James',1); Query OK, 1 row affected (0.18 sec) mysql> insert into ErrorDemo(Name,isStudent) values('Bob',1); Query OK, 1 row affected (0.19 sec) mysql> insert into ErrorDemo(Name,isStudent) values('David',1); Query OK, 1 row affected (0.15 sec) mysql> insert into ErrorDemo(Name,isStudent) values('Ricky',0); Query OK, 1 row affected (0.17 sec)

সিলেক্ট স্টেটমেন্ট দিয়ে সব রেকর্ড দেখানো যাক। কোয়েরিটি হলো:

mysql> select *from ErrorDemo;

আউটপুট নিচে দেওয়া হলো:

+----+--------+-----------+ | Id | Name  | isStudent | +----+--------+-----------+ |  1 | John   |           | |  2 | Sam    |           | |  3 | Mike   |           | |  4 | Larry  |           | |  5 | Carol  |           | |  6 | Robert |           | |  7 | James  |           | |  8 | Bob    |           | |  9 | David  |           | | 10 | Ricky  |           | +----+--------+-----------+ 10 rows in set (0.00 sec)

আসল স্যাম্পল আউটপুটের স্ন্যাপশট নিচে দেওয়া হলো:

MySQL ERROR 1406 সমাধান:  Data too long for column  কিন্তু হওয়া উচিত নয়

উপরের আলোচনা অনুযায়ী এররটি নিচের কোয়েরিতে জেনারেট হয়:

mysql> update ErrorDemo set isStudent='1' where Id=9; ERROR 1406 (22001): Data too long for column 'isStudent' at row 1

উপরের এরর এড়াতে b প্রিফিক্স দিয়ে '1' লিখতে হবে। এখন কোয়েরিটি হবে:

mysql> update ErrorDemo set isStudent=b'1' where Id=9; Query OK, 0 rows affected (0.00 sec) Rows matched: 1 Changed: 0 Warnings: 0

আবার সিলেক্ট স্টেটমেন্ট দিয়ে টেবিলের রেকর্ড চেক করা যাক। কোয়েরিটি হলো:

mysql> select *from ErrorDemo;

আউটপুট নিচে দেওয়া হলো:

+----+--------+-----------+ | Id | Name  | isStudent | +----+--------+-----------+ |  1 | John   |           | |  2 | Sam    |           | |  3 | Mike   |           | |  4 | Larry  |           | |  5 | Carol  |           | |  6 | Robert |           | |  7 | James  |           | |  8 | Bob    |           | |  9 | David  |           | | 10 | Ricky  |           | +----+--------+-----------+ 10 rows in set (0.00 sec)

আসল স্যাম্পল আউটপুটের স্ন্যাপশট নিচে দেওয়া হলো:

MySQL ERROR 1406 সমাধান:  Data too long for column  কিন্তু হওয়া উচিত নয়

isStudent কলামটি দেখুন।

এখন একই আইডিকে 0 ভ্যালু দিয়ে আপডেট করুন। এটি соответствующий আইডির সাথে খালি ভ্যালু দেবে। কোয়েরিটি হলো:

mysql> update ErrorDemo set Name='Maxwell', isStudent=b'0' where Id=9; Query OK, 1 row affected (0.16 sec) Rows matched: 1 Changed: 1 Warnings: 0

উপরের আপডেট করা সারির রেকর্ড চেক করা যাক। এখানে আইডি ৯। এখন আইডি ৯-এর সারি আপডেট হয়েছে। কোয়েরিটি হলো:

mysql> select *from ErrorDemo where Id=9;

আউটপুট নিচে দেওয়া হলো:

+----+---------+-----------+ | Id | Name    | isStudent | +----+---------+-----------+ | 9 | Maxwell |           | +----+---------+-----------+ 1 row in set (0.00 sec)

ব্যাখ্যা: BIT টাইপের কলামে সংখ্যা (1, 0) স্ট্রিং হিসেবে ইনসার্ট/আপডেট করলে "Data too long" এরর দেয়। সঠিক সিনট্যাক্স হলো b'1' বা b'0' (বাইনারি লিটারেল)। MySQL-এ BIT(1) বুলিয়ানের মতো কাজ করে কিন্তু ইনপুট বাইনারি লিটারেল হিসেবে দিতে হয়।

  1. MySQL-এ LIKE অপারেটরকে IN() এর মতো ব্যবহার করা

  2. Java MySQL কানেকশন এরর সমাধান: কনেক্টর ক্লাসপাথে সেট করা

  3. MySQL에서 SUM(조건)으로 특정 값 카운트 한 번에 여러 개 구하기

  4. MySQL-এ একক কোয়ারিতে সব কলামের জন্য এলিয়াস (Alias) সেট করা