\ よくわからないAmazonのセール 理解してみる? / 詳細を見る

“Null/空文字/空白/スペース/ブランク”の違いとは

ブログのアイキャッチ “Null/空文字/空白/スペース/ブランク”の違いとは

よく勘違いされますがNullと空文字は一緒ではありません。

システムの設計や開発、保守、運用など使用される事が多い用語ですが、
意外と間違って使われているようです。

プログラム(プログラミング・言語)やデータベース(DB)で使う
Nullや空文字を始め、空白やスペース、ブランクについても違いを解説します。

 

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

  • Nullや空文字、空白、スペース、ブランクについて
    • イメージをつかみたい方
    • 再確認したい方
2023.08.05 追記

改めて、この記事の内容を調べてみた結果、「ブランク」についても言語やDBにより、
取り扱いが違うことは判明しました。
表やコメントなど間違っていた内容を差し替えました。

目次

“Null と 空文字”の使用例

Null(ヌル)や空文字などは、ざっくり言うとデータの種類の違いとなります。
ここでは、プログラムの判定やデータベースのデータ取得における実例を紹介します。

空文字の使用例:プログラム C#

下記はテキストボックスtextbox_jyushoが空文字(””)の場合、エラーのメッセージを表示するというプログラムの一部です。

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

なるほど。
textbox_jyusho.Text == ""で空文字か判定しているっピね

Nullの使用例:データベース SQL Server

データベースの商品テーブル(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
しらたま

DBではWHERE NAME IS NOT NULLで、
名前がNullデータ以外のデータを取得という条件式っピね。

それぞれの違いを解説

Null・空文字・空白・スペースの違い

同じもの同士をグループ分けすると下記3種類に分類されます。

  • Null
  • 空文字    (利用環境によってブランクも入る)
  • 空白・スペース(利用環境によってブランクも入る)

なお、ブランクについては少し特殊な為、表では表現しきれていません。
後述で解説しています。

Null・空文字・空白・スペースの違いの詳細は下記のとおりです。

スクロールできます
名前Null
(ヌル、もしくはナル)
空文字
(カラモジ、もしくはクウモジ)
空白スペースブランク
英語“Null” or “Null string”“Empty” or “Empty string”“Whitespace”“Space”
半角=”Half-width Space”
   or
    “Single-byte Space”
全角=”Full-width Space”

   or
    “Multi-byte Space”
“Blank”
プログラム表記例null“” or ”” ” or ‘ ‘” ” or ‘ ‘
利用環境により
変化
イメージ図(何もない)
利用環境により
変化
イメージ説明👆 器なし、
  中身もなし
👆 器あるが
  中身なし
👆 器と中身の
  両方あり
  * 中身は空白(” “)
👆 器と中身の
  両方あり
  * 中身は空白(” “)

利用環境により
変化
グループなし空文字
(環境により
 ブランクも入る)
空白 = スペース
(環境により
 ブランクも入る)
空白 = スペース
(環境により
 ブランクも入る)

利用環境により
変化
表:Null/空文字/空白/スペース/ブランクの違い
akiGAMEBOY

ここまでの解説で“Null と 空文字 、 空白・スペースの違いを説明しました。理解できたでしょうか。

表のとおり「空白とスペース」は同じ意味で使われますね。

しらたま

えっ、でも仕事の現場によって空白と呼んだり、スペースと呼んだりして、
呼び方が変わるのは、なぜっピ🤔

akiGAMEBOY

それはね。
IT用語全般に言える事なんだけど、同じ意味を持つ用語がたくさんあるんだよね。
(例えば、冗長化構成とクラスタ構成とか。)

akiGAMEBOY

その仕事現場での伝わりやすさを重視するのであれば、
環境に合わせた用語で呼称した方が良いと思っています。
(意味合いを間違えて使っている現場は微妙な所ですが)

しらたま

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

ドキュメントや会話、メールなど伝達する際もスムーズになるっピ♪

環境により意味が変化する「ブランク」とは

IT分野における「ブランク」は、言葉の意味が統一されていません。
使用するプログラムやデータベースの違いによりブランクの扱いが異なります。

そのような背景があるためか、仕事の現場環境によって用語の使われ方も、
ばらつきがあるようです。

意味合いが変わってくる一例として、以下よりプログラムを題材に解説していきます。

例1:表計算ソフトにおけるブランクの扱い

プログラムというのは微妙な所ですが、有名どころの表計算ソフト、Microsoft Excel と Google スプレッドシートでは、ブランクを判定する関数「ISBLANK」があります。
ISBLANK関数の結果は下記の通り。

テストケーステスト対象の値実行結果
空文字“”TRUE
空白(スペース)” “FALSE
値あり”test-value”FALSE
表:表計算ソフトにおけるブランクの扱い

この結果から表計算ソフトでは、「空文字 を ブランク とも呼ぶ」となり、
空白 と ブランク は異なる意味合いです。

例2:Javaにおけるブランクの扱い

Javaでも、ブランクを判定するメソッド「IsBlank」が存在します。IsBlankメソッドの結果は下記の通り。

テストケーステスト対象の値実行結果
空文字“”true
空白(スペース)” “true
値あり“test-value”false
表:Javaにおけるブランクの扱い

Javaでは、「空文字 または 空白 を ブランク とも呼ぶ」という扱いに。

例3:Kotlinにおけるブランクの扱い

テストケーステスト対象の値実行結果
空文字“”true
空白(スペース)” “true
値あり“test-value”false
表:Kotlinにおけるブランクの扱い

Kotlinでは、Javaと同様で「空文字 または 空白 を ブランク とも呼ぶ」という扱いとなる。

参考情報


ここまで記した通り、ブランクはIT分野で共通のルールなどは無く、使用する環境により意味合いが変化します。
海外のサイトも調査しましたが、同じように業界で共通した概念ではなく、
また、他の用語と比較すると、あまり使用されていない用語のようでした。

そのエンジニアがJava畑で育ったのか、C言語畑で育ったのか、
はたまた、MySQL畑で育ったのか、などにより認識が大きく変わる用語です。
また、そのような背景もあり所属している会社によっても意味合いが大きく変わっているのだと思います。

このように共通認識がない「ブランク」という用語は、使用を控えたほうが良いかもしれません。

ちなみに私は、空文字 = ブランク という現場で長期間業務していた為、その認識でいました。
今回、調べた結果、その認識が誤っている事がわかり勉強になりました。

akiGAMEBOY

ちなみに私から発信する際は、意識的に「空白」を使ってるよ。

空白と同じ意味のスペースは文字制御以外でもよく登場する言葉で、
 混乱を招いてしまう恐れがあるという考え)

しらたま

なるほど、だっピ😊

“Null と 空文字”の扱いにおける例外

ここまで「Null と 空文字」は別物という内容で解説しました。
実は、この概念もプログラムやデータベースにより変わってきます。

Null と 空文字に関して例外的な概念を持つプログラムやデータベースは少ないですが、
その技術においてデータを取り扱う際、非常に重要なポイントとなります。
(プログラム関連で例を挙げるとPHPやJavaScriptでも特殊なケースが存在します。)

ここでは、一例としてOracleデータベースを使って例外的なNull と 空文字の扱われ方について、
解説していきます。

Oracleデータベースにおける“Null と 空文字”の扱い

Oracleデータベースでは他のデータベースやプログラムとは異なり、Nullと空文字がほぼ同じ扱いとなっています。

つまり、Oracleでは「Null ≒ 空文字という関係性となります。

詳しい解説

こちらの解説ページにある通り、完全に同じ扱いではないので、
「≒(ニアリーコールまたは、ほぼ等しい)」と表記。

このページで解説している通り、Oracle環境をSQL文でデータを検索する場合、
空文字はNullとほぼ同じ扱いで処理されます。
ですが、Oracleデータベースのテーブルに格納されている実データはNullと空文字は別けて登録可能です。

ややこしい内容ですよね。

ただ、技術的にできるからといって何も考えずに導入して良い話ではありません。
データベースを使ったシステムで実データのNullに対し特別な意味を持たせて設計すると、
Nullと空文字の2種類のデータが混在しているシステムができあがります。
そのようなシステムは良い設計のシステムとはいません

仮に、そのシステムがゼロから構築したシステムであれば、データ設計に問題があり。
リプレースしたシステムであれば、データ移行に問題があった事も考えられます。

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

OralceにおけるNullの扱われ方の公式解説ページ。

akiGAMEBOY

ちなみに私が最初に触ったデータベースは、Oracleでした。

その後、他のデータベース(SQL Server)にふれる機会があり、
Oracleと同様に「Nullと空文字」は同じ扱いだと勘違いし困った事がありました😓

しらたま

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

参考情報2:Nullの発明は失敗だった?

akiGAMEBOY

実はNullに関して今回、興味深い情報を見つけたよ。

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

しらたま

えっ💦そんなことがあったっピね。

akiGAMEBOY

そうだよね。驚くよね。
今まで私もNullという考え方がある前提でプログラムやデータベースに触れてきたので、
すごい驚きの情報だったよ。

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

まとめ

  • 「Null」と「空文字」は違う
     
  • グループ分けすると「Null」と「空文字」、「空白・スペース」の3種類
     
  • 「ブランク」はプログラムやデータベース、現場により扱い方が変わる
     
  • 「Null と 空文字」の関係性は、特殊な例外ケースあり
akiGAMEBOY

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

Nullや空文字などの違いについて解説しました。

会話していて意外と認識が間違えている方が多いなーと
肌で感じた為、記事にしてみました。
(私も間違って使っていた用語があり、興味深かったです)

この記事で“知るきっかけ”や“振り返るきっかけ”になれば幸いです。
 
それでは、また次回お会いしましょう。
さようならー

しらたま

バイバイっピー🎶

サポート募集中

この記事はお役に立てたでしょうか。現在、サポートを募集しています。
コーヒーを一杯 ☕ ご馳走いただけないでしょうか。

ブログのアイキャッチ “Null/空文字/空白/スペース/ブランク”の違いとは

この記事が気に入ったら
フォローしてね!

この記事をシェアする

コメント

コメントする

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

CAPTCHA

目次