Amazonセール開催中! こちらをクリックして詳細をチェック :-)

【違いを解説】Null・空文字・ブランク・空白・スペース

Nullと空文字を一緒だと思っていませんか?

システムの設計や開発、保守、運用など様々な場面で利用する事が多いですが、
意外と間違って使われていたりします。

今回はプログラムやデータベース(DB)で使う
「Null・空文字・ブランク・空白・スペース」の違いについて解説します。

 

この記事はこんな方にオススメ!

  • Nullや空文字などについてイメージをつかみたい方
  • 違いを再確認したい方
     
目次

プログラムやデータベースで使用する場面は?

Null(ヌル)や空文字などのデータを扱う例として
プログラムの判定やデータベースのデータ取得の際に使用されます。

プログラムで使用する場合の例

textbox_jyusho.Text == ""の条件により
テキストボックス(textbox_jyusho.Text)が空文字(””)の場合、
エラーのメッセージボックスを表示するプログラムです。

// テキストボックス「textbox_jyusho」に何も入力していない場合
// メッセージボックスで通知する
if textbox_jyusho.Text == "" {
	MessageBox.Show("住所が未入力です。",
					"必須入力エラー",
					MessageBoxButtons.OK,
					MessageBoxIcon.Error);
}

データベースで使用する場合の例

データベースの商品テーブル(TBL_SHOHIN)でWHERE NAME IS NOT NULLの条件により
商品名(NAME)がNull以外の商品データを取得するSQLコマンドの例です。

-- データベースのテーブル「TBL_SHOHIN」より項目「NAME」がNull以外のデータを取得
SELECT NAME, VALUE FROM TBL_SHOHIN WHERE NAME IS NOT NULL

違いを解説

同じもの同士でグループ分けすると「Null」と「空文字・ブランク」、
空白・スペース」の3種類にわかれます。
詳細なそれぞれの違いは下記の表のとおりです。

名称プログラム表記例イメージ補足事項
Null(ヌル・ナル)null  ←器なし
空文字“” ←器あり、中身なし空文字 = ブランク
ブランク“” ←器あり、中身なし空文字 = ブランク
空白” “ ←器あり、中身あり
   (中身は文字はなく空白のみ)
空白 = スペース
スペース” “ ←器あり、中身あり
   (中身は文字はなく空白のみ)
空白 = スペース
Null・空文字・ブランク・空白・スペースの違いについて
akiGAMEBOY

「Null」と「空文字・ブランク」、「空白・スペース」
それぞれの違いについて理解できたでしょうか。
表のとおり「空文字とブランク」「空白とスペース」は
同じ意味です。

IT用語全般に言える事ですが同じ意味を持つ用語は
複数あります。
現場環境によって使用している用語に違いもあるので
伝わりやすさを重視するならば
環境に合わせた用語を選択した方が良いでしょう。

しらたま

たしかに仕事している環境に合わせて用語を使った方が
お互い頭の中での変換が必要なくなるっピ。

特別な理由がない限り合わせた方がドキュメントや会話、
メールなど伝達する際もスムーズになるっピね♪

akiGAMEBOY

ちなみに私から発信する際は意識的に「空文字」と「空白」を
使うようにしています。

理由としては空文字と同じ意味のブランク(Blank)は
英語で翻訳すると空白の意味もあります。
混乱を招いてしまうと考え「空文字」を使っています。

また、空白と同じ意味のスペースは文字制御以外でも
よく登場する言葉です。
こちらも混乱を招いてしまうと考え「空白」を使っています。

Nullと空文字についての例外

Oracleデータベースでは例外

これまでの解説では「Nullと空文字」を異なるものとして紹介しましたが
実は例外があります
Oracleデータベースでは他のデータベースと異なりNullと空文字が
ほぼ同じ扱いとなっています。

Oracleでは空文字についてもNullとして判断される為
Oracleに限っては「Null ≒ 空文字」という関係性になります。

詳しい解説

こちらの解説ページにある通り、完全に同じ扱いという訳ではありません。

SQL文でデータを検索する場合、空文字はNullとほぼ同じ扱いで
処理されますが、Oracleデータベースのテーブルに格納されている
実データについてはNullと空文字でわけて登録することが可能です。
(実データでは違うデータで登録されているが、SELECT文などで
 データを参照する場合は区別されず同じ扱いになる)

ただ、データベースを使ったシステムで
実データにNullと空文字の2種類のデータが混在している状態は
システムとしてかなり悪い状態だと言えます。

仮にそのシステムがゼロから作ったシステムなのであれば
データ設計に問題があり、
リプレースしたシステムなのであればデータ移行に
問題があったのではと推測します。

参考情報:Oracle公式 Nullについて(英文)

Nulls (oracle.com)

akiGAMEBOY

私が最初に触りSQL文を学んだデータベースは
Oracleでした。

それから月日が経って
他のデータベース(SQL Server)に初めてふれる機会があり
Oracleと同様に「Nullと空文字」は同じ扱いだと
勘違いしていました😓

akiGAMEBOY

過去のバージョンとの互換性の問題があるので
簡単にはできないと思いますが、
OracleのNullと空文字に関する仕様は見直して
ほしいですね💦

しらたま

そのことで興味深い情報を見つけたッピよ。

Nullを発明したコンピューター科学者のアントニー・ホーア氏
2009年のソフトウェアカンファレンス
Nullの発明は失敗だった」という謝罪があったみたいッピよ。

akiGAMEBOY

そうなんだー、知らなかったよ。

Nullの考え方があるという前提で
プログラムやデータベースが浸透しているから
ビックリな情報だね。

Oracle側の意図はわからないけど、もしかすると
OralceのようにNullを無くしていくような方向に
業界が動いていくかもしれないね。

まとめ

  • 「Nullと空文字」は違う
     
  • 「Null」と「空文字・ブランク」、「空白・スペース」それぞれ
    3種類にわけることができる。
     
  • 例外としてOracleデータベースでは「Nullと空文字はほぼ同じ扱い」
akiGAMEBOY

以上でこの記事は終わりです。

Nullや空文字などの違いについて解説しました。
会話していて意外と認識が間違えている方が多いなーと
肌で感じた為、記事にしてみました。
 
この記事で知るきっかけや振り返るきっかけになれば幸いです。
 
それでは、また次回お会いしましょう。さようならー

しらたま

バイバイっピー🎶

この記事をシェア

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次