PHP-এ খালি স্ট্রিং NULL এর সমান, কিন্তু MySQL-এ ক্ষেত্রটি ভিন্ন অর্থাৎ খালি স্ট্রিং NULL এর সমান নয়। এটি বুঝতে NOT NULL কনস্ট্রেইন্টসহ একটি কলাম তৈরি করা যাক যেখানে খালি স্ট্রিং ইনসার্ট করা যাবে।
একটি টেবিল তৈরি করা যাক। টেবিল তৈরির কোয়েরি:
mysql> create table EmptyStringNotNullDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(10) not null,
-> PRIMARY KEY(Id)
-> ); Query OK, 0 rows affected (0.83 sec)
খালি স্ট্রিং NULL কিনা NOT NULL কিনা চেক করতে কিছু রেকর্ড ইনসার্ট করা যাক। রেকর্ড ইনসার্ট করার কোয়েরি:
mysql> insert into EmptyStringNotNullDemo(Name) values('John'); Query OK, 1 row affected (0.17 sec) mysql> insert into EmptyStringNotNullDemo(Name) values(''); Query OK, 1 row affected (0.43 sec) mysql> insert into EmptyStringNotNullDemo(Name) values('Carol'); Query OK, 1 row affected (0.12 sec) mysql> insert into EmptyStringNotNullDemo(Name) values(''); Query OK, 1 row affected (0.13 sec) mysql> insert into EmptyStringNotNullDemo(Name) values(''); Query OK, 1 row affected (0.16 sec) mysql> insert into EmptyStringNotNullDemo(Name) values('Larry'); Query OK, 1 row affected (0.14 sec)
সিলেক্ট স্টেটমেন্ট দিয়ে সব রেকর্ড দেখানো যাক। কোয়েরিটি হলো:
mysql> select *from EmptyStringNotNullDemo;
আউটপুট নিচে দেওয়া হলো:
+----+-------+ | Id | Name | +----+-------+ | 1 | John | | 2 | | | 3 | Carol | | 4 | | | 5 | | | 6 | Larry | +----+-------+ 6 rows in set (0.00 sec)
এখন খালি স্ট্রিং NULL কিনা NOT NULL কিনা চেক করা যাক। যদি 0 পাওয়া যায়, তবে খালি স্ট্রিং NULL এর সমান নয়, অন্যথায় খালি স্ট্রিং NULL। কোয়েরিটি হলো:
mysql> select Name, Name IS NULL as EmptyValueIsNotNULL from EmptyStringNotNullDemo;
আউটপুট নিচে দেওয়া হলো:
+-------+---------------------+ | Name | EmptyValueIsNotNULL | +-------+---------------------+ | John | 0 | | | 0 | | Carol | 0 | | | 0 | | | 0 | | Larry | 0 | +-------+---------------------+ 6 rows in set (0.00 sec)
সবকেসে 0 (false) আসছে, অর্থাৎ খালি স্ট্রিং NULL নয়। ইউজার-ডিফাইন্ড ভেরিয়েবল দিয়েও এটি অর্জন করা যায়। সিনট্যাক্স নিচে দেওয়া হলো:
SET @anyVariableName=""; UPDATE yourTableName SET yourColumnName= @anyVariableName;
দেওয়া টেবিলের জন্য উপরের সিনট্যাক্স ইমপ্লিমেন্ট করা যাক। ইউজার ভেরিয়েবল ডিক্লেয়ার এবং ডিফাইন করার কোয়েরি:
mysql> set @emptyStringValue=""; Query OK, 0 rows affected (0.00 sec)
টেবিলটিকে খালি স্ট্রিং দিয়ে আপডেট করা যাক। কোয়েরিটি হলো:
mysql> update EmptyStringNotNullDemo set Name=@emptyStringValue; Query OK, 3 rows affected (0.25 sec) Rows matched: 6 Changed: 3 Warnings: 0
আবার টেবিলের সব রেকর্ড দেখানো যাক। কোয়েরিটি হলো:
mysql> select *from EmptyStringNotNullDemo;
আউটপুট নিচে দেওয়া হলো:
+----+------+ | Id | Name | +----+------+ | 1 | | | 2 | | | 3 | | | 4 | | | 5 | | | 6 | | +----+------+ 6 rows in set (0.00 sec)
Name কলামটি আপডেট হয়েছে।
ব্যাখ্যা: MySQL-এ '' (খালি স্ট্রিং) এবং NULL দুটি ভিন্ন জিনিস। NOT NULL কলামে '' ইনসার্ট করা যায়, কিন্তু NULL ইনসার্ট করা যায় না। IS NULL চেক করলে খালি স্ট্রিংয়ের জন্য false (0) রিটার্ন করে। এটি PHP-এ empty() বা == null চেকের সাথে মেলে না, তাই ডেভেলপমেন্টে সতর্ক থাকতে হয়।