15
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【MySQL】カラムのNULL・空白判定とCONCAT関数における扱いがややこしい

Last updated at Posted at 2019-11-04

ややこしかったのでメモしておきます。

テーブルは以下の構成とします。(テーブル名はproducts)
型が違う場合の挙動は分かりません。

名前 データ型
id int(11)
name varchar(30)

「!=」は「=」の逆ではない

等価演算子

このSQLの場合、nameカラムがNULLのレコードが抽出されません。

SELECT * FROM `products` WHERE name = ''

nameカラムがNULLと空白両方のレコードを抽出したい場合は、NULL判定用の条件を追加する必要があります。

SELECT * FROM `products` WHERE name = '' OR name IS NULL

不等価演算子

こちらのSQLの場合、nameカラムがNULL・空白両方のレコードが除外されます。
等価演算子と真逆の挙動ではありません。

SELECT * FROM `products` WHERE name != ''

<>を使用した場合も同じ挙動でした。

SELECT * FROM `products` WHERE name <> ''

CONCAT関数

連結するカラムの値がNULLの場合

nameカラムがNULLの場合は更新されず、NULLのままになります。

UPDATE products SET name = CONCAT('test', name)

カラムの値がNULLでも連結させたい場合

IFNULL関数で値を空白に置き換えます。

UPDATE products SET name = CONCAT('test', IFNULL(name, '')) 

参考記事

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?