• 締切済み

NULLとブランクの違い

ものすごく基本的なことですが、NULLとブランクはどうちがうのでしょうか? また、ブランクってスペースと同じでしょうか? ""=ブランクと記述されたり、空白=ブランクと記述されたりしていますが、よくわかりません。。。 よろしくおねがいします。

みんなの回答

回答No.6

どちらも「ない」事ですが、違いを分かりやすく言えば ブランク(空白)は見たけど無い ヌル(null)は見てないのでわから無い 情報処理に従事してる方には当たり前の事ですが、値は全然違います。 ブランク= 20(16)や40(16) ヌル= 00(16)

  • sjam
  • ベストアンサー率41% (26/63)
回答No.5

#3です。#4さんの回答を受けて自分の回答が誤解を招くと思ったので修正回答です。 一般的に「意味をもたない空白」をブランクと、「間隔・距離(意味をもつ空白)」をスペースと表現しわけます。(必ずしもそうでない場合も有りますが、やはり多くの場合は使い分けます。) そうした「意味をもたない空白,箱」という意味で "" をブランクと呼ぶ人が多いです。対して "  " は明確に間隔・距離を示すスペース(文字)と呼ぶ人が多いです。 蛇足ですが、【昔は】、""をブランクではなくNULLとよび、"  "をスペースではなくブランクとよぶ事が一般的に多かったのですが、今はやはり未定義の内容をNULL、"  "をスペースと呼ぶのが一般的に浸透して、結果的に""をブランクと使い分けていると感じます。 このあたりの背景事情から今だ人によって解釈が異なる場合もでて、ややこしいですが。 特にブランクとスペースはどちらも空白や余白と訳されてしまいますが、ニュアンスは異なります。

wakasen
質問者

お礼

貴重なご意見ありがとうございました。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★私には『""=ブランク』の表現がしっくり来ません。 ・『blank』ってのは、空白、余白、スペースという意味です。  なので『""』をブランクと呼ぶ表現はおかしいと思います。普通は『""』を空文字列と呼びます。  空文字列とは、文字列が何もないが文字列としてのポインタ(アドレス)を持つデータです。 ・そして、NULL はポインタ(アドレス)の値がゼロを持ち、ポインタにはデータは割り付けていない事を  意味します。つまり『データなし』を意味します。 ・他にも NULL にはいろいろな意味を持たせたりします。  (1)検索処理で文字、文字群、文字列などが見つからないと NULL を返す。→エラーの意味。  (2)最初、ポインタ(アドレス)の変数に NULL をセットして初期化しておく。→初期化の意味。  (3)C言語の『fgets』関数などは、ファイルの終わりか、エラーが発生すると NULL を返してお知らせ。  上記のように処理によって意味が少しずつ異なりますが、一般には NULL は『データなし』、『無効』  『エラーが発生』などの意味を持っています。特にポインタ(アドレス)で何かのデータを返す関数では  『無効』や『エラー』時に NULL ポインタを必ず返します。 ・あと NULL 文字も存在します。  これはC言語でいう文字列の最後を表す \0 を指します。  初心者さんは、NULL 文字(\0)と NULL ポインタを同じ扱いにしてしまいますが『別物』です。  NULL 文字(\0)は、文字コードが 0x00 の 1 バイトの値です。→マルチバイトの場合  これに対して NULL ポインタは、ポインタ(アドレス)の値が 0x00000000(32Bit) です。  ポインタとバイトでは意味が違います。注意! まとめ: ・『blank』⇒空白、余白、スペースという意味です。 ・『""』⇒空文字列です。何もない『空』の文字列ポインタです。 ・『NULL』⇒NULL ポインタです。ポインタの値が 0x00000000 です。 ・『\0』⇒NULL 文字です。文字列の最後を表すバイトで 0x00 です。 ・wakasen さんが参照した記事の表現は、適切ではないため注意して下さい。→混乱させる表現です。  正しくは、『""』=空文字列、『空白』=ブランク(スペース)、『NULL』=NULL ポインタです。 ・以上。おわり。

wakasen
質問者

お礼

貴重なご意見ありがとうございました。 非常に分かりやすかったです。

  • sjam
  • ベストアンサー率41% (26/63)
回答No.3

ブランク:値が存在しない/0もスペースも存在しない。 スペース:スペース文字が存在する。 ブランクも空白と表現される事がありますが、正確にはブランクは空でスペースが空白であって、意味は異なります。 NULL:値が定義されていない NULLは、処理系によって動作が異なりますが、値が定義されていない=空(ブランク)とも、0とも、空白とも定義されていない状態です。 なかなか理解が難しいですが、日常に例えていいますと、 ・箱をあなたが買って来たとします。(変数を定義します。) さて、内容は? 答えは、「わかりません」 箱の使い方や組み立て方のパンフレットが入っているかもしれないし、何も無いかも知れません。まだ買ってきた箱は包装された状態で、内容を見る事もできません。これがNULLです。 箱の包装を開き、内容を全て取り出した状態、何も入っていない状態、これがブランクです。 注意が必要なのは、NULLとNULLは、どちらも内容がわかりませんから、比較ができません。 例えば、今日買った箱には、パンフレットが入っているかも知れません。でも、パンフレットが期間限定だったり数量限定だったりして、毎回同じとは限りません。 ですから、未開封の箱(NULL)と未開封の箱(NULL)は比較出来ません。 但し、処理系によっては、「不明な物は比較できない」とエラーになる物もあるし、「未開封」と「未開封」で同じ、と判断する物もあるし、実際に開封してみて、内容を比較し、(場合によっては)内容が異なったという結果を返す可能性すらあります。 なお、NULLと空白の比較や、ブランクと0との比較などは当然異なるという結果を返しますが、 「内容が『有る』か『無し』か?」というチェックの場合には、ブランク(何もない)・NULL(何も定義されていない)・0(数値がない)といずれも同一の結果(TRUEではない=FALSE)を返す処理が多用されます。

wakasen
質問者

お礼

貴重なご意見ありがとうございました。

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

イメージとしては、NULLは何が分からないかも分からない状態、ブランクは何が分からないかは分かっている状態。 ブランクにはブランクというものが入っています。イメージとしては0です。そこには0というものが存在するわけです。インド人って偉大です。NULLは本当に何もありません。 扱いはソフトによって異なります。ブランクとブランクは殆ど(おそらく全て)の言語で比較が可能です。当然等しいという結果になります。 NULL同士の比較は言語によって扱いが異なります。ある限定した条件ならNULLとNULLは等しいという表現ができることもあります。ただ多くのケースでNULLとNULLの比較結果はNULLになりますし、NULLを比較しようとした時点でエラーをはくこともあります。

wakasen
質問者

お礼

貴重なご意見ありがとうございました。

  • ANIKI2007
  • ベストアンサー率36% (21/57)
回答No.1

「NULL」とは、無効な文字列のことです。 実体の無いからっぽのデータを意味する単語で、エラー処理に用いられます。 (普段は数字が入るはずの変数にNULLが入ったらエラー処理に飛ばす、とか) 「ブランク」は、完全な空白です。スペースとは違いますね。 (変数に数値を代入するが、初期値はブランクにしておく、とか) 私の意見としては、こんな感じです。

wakasen
質問者

お礼

貴重なご意見ありがとうございました。

関連するQ&A

  • ブランクのチェック

    C言語で、入力されたブランク(空白ではない)をチェックするようなプログラミングするにはどうしたらよいでしょうか。 char n [64]; scanf( %s , n ); if(n==""){ printf("エラー:入力してください\n"); } だと空白(NULL)の扱いになってしまいますか? ブランクに対してはどうプログラムを組めばいいでしょうか。

  • Null値が入れられない

    種別:Decimal(18,2) 属性:UNSIGNED NULL:はい デフォルト値:NULL のフィールドがあります。phpMyAdminを通じてデータを入力しております。Null値のチェックを入れれば良いのですが、空白のまま残したおいた場合には、デフォルト値であるNull値が格納されるものと思っておりましたが、空白ですと0.00に変換されてしまします。 また、同時に、スクリプトの方ではjqGridを使用しているのですが、こちらの方でデータ編集をする際には、Null値のチェックボタンはありませんので、空白のままで更新しなければなりません。上記と同様に、空白にしておくと、0.00に変換されてしまいます。 Null値を入れるためには、どのような方法があるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • nullと""、\0とEOFの違いについて。

    いつも気になっていたのですが、 (1)nullと""、(2)\0とEOFは、同じなのでしょうか、 違うのでしょうか。 (1)については、違う気がします。しかし、""は、 なにを表しているのか分かりません(0バイトなのか、 空文字にも文字コードがあるのか、""と空白" "は 違うのか)。 (2)は、同じだと思うのですが・・。 文字を数えたりすると、これらが気になります。 お願いします。

  • NOT NULL制約がついた項目のUPDATEについて

    基本的な事で申し訳ありません。 Oracle10g を使用していますが、 SQLのUPDATE文で主キーではない、 NOT NULL 制約がついたVARCHAR2(30)の項目を ''(ブランク)で更新しようとした所エラーが返されました。(ORA-01407) NULLで更新するのではないから大丈夫かと思っていたんですが、 NOT NULL 制約がついているとブランクでも更新ができないのでしょうか?

  • 【エクセル】ActiveCellはなぜNullではないのでしょうか?

    私は今まで新規のシートを挿入した際のActiveCellは、Nullだと思っていたのですが Sub Empty空白なら() If ActiveCell.Value = Empty Then Debug.Print "空白セルです" End Sub Sub Null空白なら() If ActiveCell.Value = Null Then Debug.Print "空白セルです" End Sub Sub Null空白なら2() If IsNull(ActiveCell.Value) = True Then Debug.Print "空白セルです" End Sub VBAでこのコードを実行すると Emptyの方だけ「空白セルです」となりました。 (1)なぜ空白でもNullだと反応しないのでしょうか? (2)NullとEmptyの違いはなんですか? ご教授よろしくお願い致します。

  • Null と  Empty  ""

    テキストボックスを空白にする際、 Me.テキスト0.Value = Null Me.テキスト0.Value = Empty Me.テキスト0.Value = "" どのコードがいい!などはありますか? 全てエラーにはならず空白になります。 「なるべくNULLを使ったほうがいい」などあれば 教えてください。 access2003です。 よろしくお願い致します。

  • Null値を並べ替えで・・・

    アクセスのクエリの並べ替えで、昇順にするとNull値(空白)が最初にくると、ヘルプにありました。空白は最後にしてそのほかの値は昇順なんてことはできないのでしょうか?できるのでしたら教えてください。

  • アクセスのフィルタ nullについて。

    質問です。 アクセスのテーブルの中で、あるフィールド(フィールド名:管理番号)が空白のものだけ抽出したいのです。フィルターで、管理番号箇所に「Is Null」としたのですが、実際空白になっているデータがうまく抽出されません。 で、「Is Not Null」で抽出するとそれらのデータが抽出されます。 そのデータの認識ではnullになってないようです。 (でも実際空白です。) どうやったらnullで抽出されるでしょうか? ちなみにそのフィールドのデータ型はテキスト型です。

  • SQLServerでNULLを挿入したいです

    SQLServerでINSERT文を書くとき、NULLを意図的に登録したいのですがどのようにすればよいのでしょうか? ''にするとブランクとして登録されてしまいます。

  • null→数値にするには?

    何度も質問してすみません。 NULLが格納されているフィールドに 「0」や「1」といった値を入れる為には どういうINSERT INTO文をPHP内で記述すれば宜しいでしょうか? pg_field_is_nullを使ってみたのですが イマイチ値を変更する事ができません。 また、SQL文で「NOT NULL制約」という言葉があるのを知ったのですが、 ALTER TABLE文でテーブルを作る時に、 各フィールドにはnullではなく、「0」を最初から格納したい場合は どういった記述をすれば宜しいでしょうか? 宜しくお願い致します。

専門家に質問してみよう