こんばんは。できひこです。
今回も業務の覚書です。
SQLでもjavaでも様々な箇所でNullと空文字という問題に直面するかと思います。
私はたった今Accessで直面したところです。
まずNullとは?何も入力されていないフィールドだ!
で正しくはあるのですが、「何もない」にも種類があるのです。
それがNullと空文字です。どちらも共通して空白に見えます。
ものによって解釈は変わってきますので
今回はAccessにおけるNullと空文字の説明と年頭においておいて下さい
Nullとは一体?
先ほど、何も入力されていないフィールドと書きましたが、基本的には
レコードが作成されてから一度もデータの入力がされていない値です。
では一度でも入力がされ、それが削除されたら?
これはNullではなくなるのでしょうか?
空文字とは一体?
空文字、もしくは長さ0の文字列。
Nullと同様空白で表示されています。が、Nullではありません。
データが一度入力され、削除されたか。もしくは「""」(ダブルクォート2個)
のみ入力されているもの等が空文字として扱われます。
(設定により変わりますので後述します)
ちょっとした中古品みたいな感覚でしょうか(そうとは言い切れません)
フィールドの設定によって変わってきます
プロパティの項目のうち、「値要求」と「空文字列の許可」によって
Nullと空文字の入力のされ方が変わります。
まず値要求とは、なにかしらの値の入力(文字、数値、空文字)
を要求するかしないかです。
要求する場合はNullの入力が出来なくなります。
空文字列の許可とは、文字通り空文字を入れられるか入れられないかです。
Nullについてはこの項目では制御されません。
それぞれ組み合わせで見てみましょう
①値要求=いいえ・空文字列=いいえ
Nullは入力が可能ですが「""」の入力ができません。
また、入力文字列の削除でもNullになります。
②値要求=はい・空文字列=いいえ
Null、空文字ともに入力不能。なにかしらの文字・数値の入力必須
③値要求=いいえ・空文字列=はい
基本的に初期設定されています。Null・空文字ともに入力可能。
ここでは文字列を削除した場合=Null
「""」の入力で空文字として扱われます
④値要求=はい・空文字列=はい
Nullが入力不能です。空文字は入力可能
値要求があるので、入力をEnterで飛ばすことが出来ません。
文字列の削除をした場合=空文字、「""」も空文字として扱われます。
見ただけではどのように扱われるか理解するのは難しいと思います・・・
百聞は一見にしかず!実際に操作をして動作確認してみましょう。
またNz関数というNullを0にする関数も存在するのですが
それはまた今度のお話で(私もわかりません)