ど素人から毛を生やす。<延>

[MySQL]空文字 or NULL を一息で判別したかった話

Web > Other 2018年8月21日(最終更新:5年前)

2018年8月21日に作成されたページです。
情報が古かったり、僕が今以上のど素人だった頃の記事だったりする可能性があります。

どもです。
MySQL初心者です。

カラムAにデータが入っていたらAを、入っていなかったらBの内容を取得したかったのですが、
「入っていない状態」は空文字とNULLの2パターンが想定される。
DB構成としてアカンくないか、NULL許容させんなや、などとツッコミはありますが、古いDBに文句言っても仕方ない。

さて、NULLと空文字が別物だってのは、MySQL初心者でも常識です。

NULLは「IS NULL」で、空文字は「=''」で指定、
と思ったのですが、「!=''」でNULLと空文字の両方を除外できると小耳に挟みました。

え、なにゆえ??
じゃあ「!=''」を使おう、とするには、そうなる理由がわからなくて怖い。

そう思っていましたら、こちらのQiitaの記事にすごくわかりやすい解説コメントがついていまして。

要約すると、「!=''」のとき


'AAA' ⇒ TRUE
''    ⇒ FALSE
NULL  ⇒ NULL

まじか( ゚Д゚)
試しにSELECTのところで演算してみたところ、確かに上記の結果が出力されました。

NULLだとFALSEでなくNULLを返す、真偽に於いてNULLはFALSEと同じ結果になる、と。
勉強になった。

ちなみに「!=''」のほか「<>」でも同様の結果を確認しました。
MySQLライクなのは「<>」の方かな。


追記


       ''   <>'' ⇒ FALSE
BINARY ''   <>'' ⇒ FALSE
--------------------------
       '0'  <>'' ⇒ TRUE
       '1'  <>'' ⇒ TRUE
BINARY '0'  <>'' ⇒ TRUE
--------------------------
        0   <>'' ⇒ FALSE
        1   <>'' ⇒ TRUE
BINARY  0   <>'' ⇒ TRUE
--------------------------
       NULL <>'' ⇒ NULL
BINARY NULL <>'' ⇒ NULL

数値型と比較すると、0もFALSEになるようです。厳密に比較したい場合はBINARYを使います。
知らずに使うとドツボに嵌りそうですが、知って使う分には便利そう。

この記事は役に立ちましたか?
  • (`・ω・´) 役に立った (2)
  • _(:3」∠)_ 面白かった (3)
  • (・∀・) 参考になった (6)