কারণ
MySQL স্ট্রিংকে স্বয়ংক্রিয়ভাবে INTEGER-এ কনভার্ট করে তুলনা করে। স্ট্রিংয়ের শুরুতে সংখ্যা থাকলে সেই সংখ্যাটি নেয়, নাহলে ০ ধরে।
টেবিল তৈরি এবং ডেটা
mysql> create table DemoTable1852 ( Value1 varchar(20), Value2 int ); Query OK, 0 rows affected (0.00 sec)
mysql> insert into DemoTable1852 values('1John',1); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1852 values('John',1); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1852 values('1',1); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1852 values('John1',1); Query OK, 1 row affected (0.00 sec)
তুলনায় ফলাফল
mysql> select Value1, Value2, Value1=Value2 as Result from DemoTable1852;
+--------+--------+--------+ | Value1 | Value2 | Result | +--------+--------+--------+ | 1John | 1 | 1 | | John | 1 | 0 | | 1 | 1 | 1 | | John1 | 1 | 0 | +--------+--------+--------+ 4 rows in set, 3 warnings (0.00 sec)
ব্যাখ্যা: '1John' -> ১ (শুরুতে ১ পাওয়া গেলে), 'John' -> ০ (শুরুতে অঙ্ক নেই), '1' -> ১, 'John1' -> ০। MySQL এভাবে ইমপ্লিসিট কনভারশন করে, যা কখনও কখনও অপ্রত্যাশিত ফলাফল দেয়। তাই এক্সপ্লিসিট CAST() ব্যবহার করা ভালো।