\ Amazonのセール、完全に理解した! /

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

Null空文字 は同じ意味(解釈)ではありません。

システムの設計や開発、保守、運用など様々なシーンで使用される用語ですが、意外と勘違いして使用されているようです。

Null空文字以外にも「空白スペースブランク」といった用語があり、それらすべての違いを解説します。

 

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

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

改めて、この記事の内容を調べてみた結果、「ブランク」は言語やDBによって、取り扱いが異なることがわかりました。
認識が間違えていた内容や表現を差し替えています。

“Null と 空文字” 実際の使用例

私の体感で特に勘違いされていているのは、Null(ヌル/ナル)と空文字(からもじ/くうもじ)です。
この2つ以外にも該当する概念ですが、ざっくりと違いを表現するとデータの種類の違い

下記にそれらデータの使われ方の例としてプログラムのコードデータベースのSQL文の2点をあげます。

細かい実例はスキップして、すぐに違いを把握したい方は “違いがわかる表”(👈 クリックでページ内にある見出しにジャンプ) をご参照ください。

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

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

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

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

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

データベース内にある製品情報の管理テーブル(ProductsMaster)でWHERE ProductName IS NOT NULLという条件により、
項目の製品(ProductName)がNull以外のデータを取得するSQL文という内容です。

-- データベースのテーブル「ProductsMaster」より項目「ProductName」がNull以外のデータを取得
SELECT ProductName, ProductValue FROM ProductsMaster WHERE ProductName IS NOT NULL
しらたま

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

違いを詳しく解説

グループ分けすると3グループ!

同じ意味の用語でグループ分けすると下記3種類となります。

  • Null” グループ
     
  • 空文字” グループ
    ※ 利用している環境によりブランクが仲間に入る
     
  • 空白・スペース” グループ
    ※利用している環境によりブランクが仲間に入る

なお、ブランクは、利用している環境によって扱われ方が異なる用語です。

違いがわかる表

それぞれの違いを書道用具のイラストを使って解説。
比較表では、書道道具を下記のようなイメージで表現しています。

  • 下敷き
    プログラムの言語など環境がある土台を表しています。
  • 半紙
    土台(下敷き)上にある文字入力できる器として表現。
akiGAMEBOY

繰り返しになりますが、ブランク利用環境によって扱いが変わる用語
その為、この表でも具体的な表現を避けています。ブランク解説は後述しています。

スクロールできます
名前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空文字
※ 基本的に ブランク という用語の意味に空文字を含まれる。
空白 = スペース
※ 環境により ブランク が入ったり入らなかったり。
空白 = スペース
※ 環境により ブランク が入ったり入らなかったり。
※ 利用環境により変化
表:Null/空文字/空白/スペース/ブランクの違い
akiGAMEBOY

ここまでブランクを除いた4つの用語「Null空文字空白スペース」の違いを解説しました。

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

しらたま

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

akiGAMEBOY

それはIT用語全般に言える事なんだけど、同じような意味を持つ用語がたくさんあるんだよね。

わたし個人の意見だけど、そういう場合は仕事現場での伝わりやすさを重視した方が良くて、
それぞれの環境に合わせた用語で呼称した方が良いと思うよ。

しらたま

たしかに仕事現場に合わせて用語を選択した方が会話するにも齟齬が少なくなるっピね。

akiGAMEBOY

ただ、そもそも概念や捉え方が履き違えている場合、認識を合わせる必要はあると思うよ。

しらたま

わかったっピ。

これでドキュメントや会話、メール、チャットで齟齬が無くスムーズになりそうっピヨ♪

環境により意味・取り扱いが変わる「ブランク」とは

IT分野における「ブランク」という言葉は、言葉の意味やプログラム・DBでの取り扱われ方が統一されていません。使用するプログラムやデータベースの違いによって大きく変わる場合があるので注意が必要です。

この用語の扱われ方は、仕事現場などの環境に強く依存している背景があるため、認識にばらつきがあるというのが実情です。(何を隠そう私もこの記事を書くまで認識が間違えていました。)

下記より具体的な例を使って解説していきます!

ExcelやJava、Kotlinなどの環境によりブランクの意味合いが変わる事が表現されたイラスト
イラスト:プログラム言語によりブランクの意味合いが変わる(書道用品の下敷き色違いで表現)

例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分野で共通認識やルールは無く、使用している環境により意味合い・定義が変わるということがわかりました。

海外のサイトでもブランク(Blank)の取り扱われ方を調査してみましたが、今回の調査結果と同様に共通認識がないようです。
“Blank” という用語そのもののヒット数も極端に少なく、“Empty” や “White space” の方が一般的に多く使用されているという事も見えてきました。

ここまでのブランクの解説をまとめると、
そのエンジニアがJava畑で育ったのか、またはC言語畑で育ったのか、はたまたMySQL畑で育ったのか、など環境によって認識が変わる用語です。
言語などの環境によって認識も変わる用語であるため、会社ごとに違ったり大きな企業だと所属する部署でも異なる認識の可能性も。

これらの事から「ブランク」は、いろいろな体験を積んでいないと、その違いや特徴に気付きにくい危険な用語だと言えます。

ブランクは使用しない方が得策かも…

akiGAMEBOY

私個人の意見では、共通認識がない「ブランク」という用語の使用は、
なるべく控えたほうが良いと考えています。

しらたま

たしかに混乱の種になりそうっピね

akiGAMEBOY

ちなみに私もこの記事を作成する前は「ブランク空文字」という間違った認識でした!

間違いに気付けた良かった……

私はスペースよりも空白を積極的に使用

akiGAMEBOY

私から発信する際、意識的に「空白」を使っています。
スペースは文字制御以外においても、よく登場する単語で混乱を招く恐れがあるというのが理由。

ただ、空白の種類を厳密に表すときには「半角スペース」や「全角スペース」など “スペース” を使っています!

しらたま

なるほど、だっピ😊

“Null と 空文字” に関する例外

ここまでいろいろな情報があって混乱してしまうかもしれません……

Null空文字 は基本的に別物である!」と解説しました。これは、ほとんどのプログラムやデータベースでは一貫した認識ですが、稀に扱いが変わるプログラムやデータベースもあります。
(すごく、ややこしいですよね……IT用語…)

レアケースであったも根幹的なデータの取り扱われ方が違うことによって、システム設計や運用保守などに大きくかかわる重要なポイントだと思うので、おさえておきたい情報になるでしょう。

プログラム関連で例を挙げると PHP や JavaScript で該当するケースがあるようですが、この記事ではデータベース「Oracle」を使って“Null空文字” に関する例外を解説します。

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

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

つまり、Null ≒ 空文字という関係性。

「Null ≒ 空文字」とは

こちらの解説ページにあるとおり、完全に同じ扱いではありません
※「≒」は “ニアリーコールまたは、ほぼ等しい” という意味。

このほぼ等しいという表現についてですが、Oracle環境でデータを検索するSQL文を実行する場合、基本的に 空文字Null は同じ扱いで処理されますが、
テーブル内の実データでは、Null空文字を別けて登録することが可能なため、ほぼ等しいという表現で記載。

正直、Oracleデータベースを使ったことがないと理解が難しいポイントだと思います。
完全に理解する必要はないので重要なポイントである「環境によって Null と 空文字 の意味合いや取り扱われ方が違うケースがある。」というのを頭の片隅に置いておけば 👌(オッケー)です。

すこし脱線したので話を戻します。
実データで Null空文字 を別けて登録可能と解説しましたが、技術的にできるからといって何も考えずに登録して良いわけではありません。

データベースで Null に特別な意味を持たせて運用してしまうと、ややこしいシステムができあがります。
そのようなシステムがある場合は、良い設定のシステムではないと言えます。

仮にNullに特別な意味を持たせたシステムがゼロから構築したシステムであれば思想や設計に問題があり、
リプレース(システム移行)したシステムなのであれば、移行設計に問題があったのだと思います。

私が最初にさわったデータベースはOracleでした

akiGAMEBOY

最初に触ったデータベースは、Oracleです。

その後、他のデータベースである SQL Server にふれる機会があって、
Oracleと同様に「Null空文字」は同じ扱いだと勘違いして冷や汗をかきましたね 😓

しらたま

互換性の問題があるので、簡単にはできないと思うっピけど、
Oracleの Null空文字 の仕様は見直すべきっピ 💦

akiGAMEBOY

わたしも同じことを思ってたけど、実は面白い情報を見つけたよ。

しらたま

なんだっピ?

Nullの発明は失敗だった?

akiGAMEBOY

Nullに関して興味深い情報を見つけたよ。

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

しらたま

えっ💦 そんなことがあったっピ!?

akiGAMEBOY

驚くよね。

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

Oracle側の意図はわからないけど、
もしかすると業界全体がNullという考え方を見直す未来がある……あるのかも 😂

参考文献

まとめ

  • Null空文字 は基本的に違う
    (レアケースで例外はある)
     
  • グループ分けすると3つに分類
    • Null グループ
    • 空文字 グループ
      ※ 環境により ブランク が入ったり入らなかったり。
    • 空白スペース グループ
      ※ 環境により ブランク が入ったり入らなかったり。
       
  • ブランク はプログラムやデータベースの環境、または仕事現場によって意味合いや取り扱われ方、認識が異なる難しい用語。
    (伝わりにくいので、わたしは使いたくない用語)
akiGAMEBOY

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

Null空文字 をはじめとするデータの種類を意味する用語の違いについて解説しました。

会話していて意外と認識が間違えている方が多いなーと肌で感じたので、記事にしてみました。

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

しらたま

バイバイっピー🎶

サポート募集中

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

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

この記事をシェアする

コメント

コメントする

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

CAPTCHA