MySQLのNULLについて解説した記事
前置き
私はあなたがこのような問題に遭遇しているかどうか、我々はMySQLのデータベースを照会しているときに、書かれた条件は、ステータス!= 1、理論的にはクエリのすべての条件を満たしていないでしょう、しかし奇妙な結果NULLは、条件またはステータスIS NULLに接続する必要が見つかりませんでしたです。この記事では、MySQLのNULLを探ります。
1 MySQLにおけるNULL
MySQL では、NULL は特別な値です。
NULLとは、未知で不確定であることを意味し、NULLはどの値とも等しくない(それ自身を含む)。
2 NULLが占める長さ
データベース内のNULLが占める長さ
mysql> select length(NULL), length(''), length('1');
+--------------+------------+-------------+
| length(NULL) | length('') | length('1') | length(NULL) | length('1')
+--------------+------------+-------------+
| NULL | 0 | 1 |
+--------------+------------+-------------+
NULL列は、その値がNULLであるかどうかを記録するために、行に追加のスペースが必要です。
NULL値''の長さは0なのでスペースを取らず、NULLの長さはNULLなのでさらにスペースを取ることがわかります。開発仕様によっては、データベースフィールドをNot NULLに設定し、デフォルト値''や0を設定することが推奨されます。
3 NULL値の比較
IS NULLは、文字がヌルであり、ヌル文字または0を表さないかどうかを判断します。
標準SQL92では、! =NULL条件は常に偽を返し、集約は常に0を返すとされています。
もちろん、SET ANSI_NULLS OFF を使ってデータベースの標準モードをオフにすることもできますが、一般的にはそうすることは推奨されません。
したがって、ある数値がNULLに等しいかどうかを判断する唯一の方法は、IS NULLまたはIS NOT NULLを使用することです。
4 SQL における NULL 値の扱い
MySQLは、データ中のNULLを簡単に処理するための関数IFNULL(expr1,expr2)を提供しています。
IFNULLは2つの引数を持ちます。最初の引数のフィールドがNULLでない場合、最初のフィールドの値が返されます。そうでなければ、IFNULL関数は第2引数の値(デフォルト値)を返します。
select IFNULL(status,0) From t_user;
5 NULL値がクエリ条件に与える影響
- =,<,> のような演算子は使用できません。NULLに対するいかなる算術演算の結果もNULLです(したがって、statusがNULLのとき、status!=1はNULLとしてカウントされません)。
- COUNT(expr) 統計を使用する場合、フィールドがNULLのデータもカウントしない。
6 NULL 値がインデックスに与える影響
最初に注意すべき点は、MySQLのデータ列がNULLを含んでいても、必ずしもインデックスが失敗するとは限らないということです。
MySQLはNULLを含む列に対してインデックスを使用することができます。
NULL値を持つフィールドに通常のインデックス、複合インデックス、フルテキストインデックスなどの一般的なインデックスを使用しても、インデックスが無効になることはありません。しかし、空間インデックスを使用する場合、そのカラムはNOT NULLでなければなりません。
7 NULL 値がソートに与える影響
ORDER BYソートにおいて、NULL値がある場合、ASCを正順に並べた場合、NULLが一番小さく、NULLが一番上になります
正のソートでNULL値をリストの後ろに置く必要がある場合、ここでIS NULLを使用する必要があります。
select * from t_user order by age is null, age;
or
select * from t_user order by isnull(name), age;
# Equivalent to
select * from (select name, age, (age is null) as isn'tull from t_user) as foo order by isn'tull, age;
8 NULLとNULLの違い
NULLは、フィールドにNULL値を格納することも意味し、NULLは、フィールドにヌル文字('')を格納することも意味します。
1. スペースの違い
mysql> select length(NULL), length(''), length('1');
+--------------+------------+-------------+
| length(NULL) | length('') | length('1') | length(NULL) | length('1')
+--------------+------------+-------------+
| NULL | 0 | 1 |
+--------------+------------+-------------+
1 row in set
要約:NULL('')の長さは0であり、スペースを取らず、NULLの長さはNULLであり、以下の説明のように実際にスペースを取ります。
NULL列は、その値がNULLであるかどうかを記録するために、行に追加のスペースが必要です。
NULL列は、その値がNULLであるかどうかを記録するために、行内に追加のスペースが必要です。
平たく言えば、NULL値は何も入っていない真空になったコップのようなもので、NULL値は空気が入っているコップで、同じように見えるが、根本的に違うのである。
要約すると
MySQL の NULL に関するこの記事は以上です。MySQL の NULL の詳細については、Script House の過去の記事を検索するか、引き続き以下の関連記事を参照してください。
関連
-
MySQL Innodb インデックスメカニズム詳細解説
-
ジョイントインデックスのためのmysqlの条件とインデックスが失敗するための条件
-
MySQLのLike演算子に関する詳細
-
MySQL XAが分散型トランザクションを実装する方法を1記事にまとめました。
-
Mysqlのソート機能の詳細
-
[解決済み】MySQLで「すべての派生テーブルは独自のエイリアスを持つ必要があります」というエラーは何ですか?
-
MySQLの一般的な分割ライブラリおよび分割テーブルスキームの概要
-
Djangoマイグレーションエラー 外部キー制約を追加できない
-
MySQL 接続タイムアウト。エラー SQLSTATE[HY000] [2002] 接続がタイムアウトしました 解決済み
-
mysql がエラーを報告します。不明な文字セットです。'utf8mb4'
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLにおけるorder byの使用方法の詳細
-
MySQL サービスとデータベース管理
-
Mysqlデータベースの手動および定期的なバックアップ手順
-
MySQLで正規表現を使う 詳細
-
[解決済み】マルチパート識別子をバインドできませんでした。
-
[解決済み] [GROUP BY句に含まれるか、集約関数で使用される必要があります。
-
[解決済み】文字列からuniqueidentifierに変換する際に変換に失敗する - 2つのGUIDの場合
-
'INSERT文はFOREIGN KEY制約「FK_TourismReservation_Users」と競合していました。その
-
Mysqlデータベースへのリンク時にpymysqlがConnection refusedエラーを報告する
-
群関数解の無効な使用