よく勘違いされますがNullと空文字は一緒ではありません。
システムの設計や開発、保守、運用など使用される事が多い用語ですが、
意外と間違って使われています。
プログラムやデータベース(DB)で使う
Nullや空文字、ブランク、空白、スペースの違いを解説します。
- Nullや空文字などについてイメージをつかみたい方
- 違いを再確認したい方
使用する場面は?
Null(ヌル)や空文字などのデータを扱う例として、
プログラムの判定やデータベースのデータ取得の際に使用されます。
プログラムでの空文字の使用例
textbox_jyusho.Text == ""
の条件によりテキストボックスが空文字(””)の場合、
エラーのメッセージボックスを表示するプログラムの例です。
// テキストボックス「textbox_jyusho」に何も入力していない場合
// メッセージボックスで通知する
if textbox_jyusho.Text == "" {
MessageBox.Show("住所が未入力です。",
"必須入力エラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
データベースでのNullの使用例
データベースの商品テーブル(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」と「空文字・ブランク」、「空白・スペース」
それぞれの違いについて理解できたでしょうか。
表のとおり「空文字とブランク」「空白とスペース」は
同じ意味です。
IT用語全般に言える事ですが同じ意味を持つ用語は
複数あります。
現場環境によって使用している用語に違いもあるので
伝わりやすさを重視するならば
環境に合わせた用語を選択した方が良いでしょう。

たしかに仕事している環境に合わせて用語を使った方が
お互い頭の中での変換が必要なくなるっピ。
特別な理由がない限り合わせた方がドキュメントや会話、
メールなど伝達する際もスムーズになるっピね♪

ちなみに私から発信する際は意識的に「空文字」と「空白」を
使うようにしています。
理由としては空文字と同じ意味のブランク(Blank)は
英語で翻訳すると空白の意味もあります。
混乱を招いてしまうと考え「空文字」を使っています。
また、空白と同じ意味のスペースは文字制御以外でも
よく登場する言葉です。
こちらも混乱を招いてしまうと考え「空白」を使っています。
Nullと空文字についての例外
Oracleデータベースでは例外
これまでの解説では「Nullと空文字」を異なるものとして紹介しましたが、
実は例外があります。
Oracleデータベースでは他のデータベースと異なりNullと空文字が、
ほぼ同じ扱いとなっています。
Oracleでは空文字についてもNullとして判断される為、
Oracleに限っては「Null ≒ 空文字」という関係性です。
詳しい解説
こちらの解説ページにある通り完全に同じ扱いという訳ではありません。
SQL文でデータを検索する場合、空文字はNullとほぼ同じ扱いで処理されますが、
Oracleデータベースのテーブルに格納されている実データはNullと空文字はわけて登録可能です。
ただ、データベースを使ったシステムで実データにNullと空文字の2種類のデータが混在している状況は、
良い状態ではありません。
仮にそのシステムがゼロから作ったシステムなのであれば、
データ設計に問題があったと考えられます。
もしくは、そのシステムがリプレースしたシステムなのであれば、
データ移行に問題があったと考えられます。
参考情報:Oracle公式 Nullについて(英文)

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

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

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

そうなんだー、知らなかったよ。
Nullの考え方があるという前提で
プログラムやデータベースが浸透しているから
ビックリな情報だね。
Oracle側の意図はわからないけど、もしかすると
OralceのようにNullを無くしていくような方向に
業界が動いていくかもしれないね。
まとめ
- 「Null」と「空文字」は違う
- 「Null」と「空文字・ブランク」、「空白・スペース」の3種類にわけることができる。
- 例外としてOracleデータベースでは「Null」と「空文字」はほぼ同じ扱い

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

バイバイっピー🎶
コメント