MySQL

MySQLのNULLと空値でハマる

More than 3 years have passed since last update.


たとえば


  • MySQL 5.6

  • hoge varchar(2) NULL可

  • 100件のレコードのうち、10件がNULL、90件が"AA"


ハマる



  • select count(1) from tablename where hoge is null : 10件
    → わかる


  • select count(1) from tablename where hoge is not null : 90件
    → わかる


  • select count(1) from tablename where hoge = 'AA' : 90件
    → わかる


  • select count(1) from tablename where hoge = '' : 0件
    → わかる


  • select count(1) from tablename where hoge != '' : 90件
    → !!!!


言い訳

''自体がクソコードなわけですが、= ''!= ''が「逆」を意味しないのはいろいろと怖い