MySQL の NULL と空の文字列

MySQL の NULL と空の文字列

最近、MySQL に触れました。昨日、テーブル構造情報を格納するための新しいテーブルを作成しました。

テーブル tablist(TABLE_SCHEMA varchar(40),TABLE_NAME varchar(40),COLUMN_NAME varchar(40),COLUMN_TYPE varchar(40),を作成します。
IS_NULLABLE varchar(10),COLUMN_DEFAULT varchar(40),COLUMN_COMMENT varchar(1000),REMARK varchar(2000));
tablist(TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME、COLUMN_TYPE、IS_NULLABLE、COLUMN_DEFAULT、COLUMN_COMMENT) に挿入します。
TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME、COLUMN_TYPE、IS_NULLABLE、COLUMN_DEFAULT、COLUMN_COMMENT を選択
information_schema.`COLUMNS` から、TABLE_SCHEMA='leo' の場合;

次に、tablist テーブルをクエリします。

コメントがない列を確認します:

COLUMN_COMMENT が null である tablist から * を選択します。

見つかった結果は空のセットでした。ただし、上記のクエリ結果と Navicat から、null 値は結果セットで「null」という単語として表示され、空の文字列は空として表示されることがわかります。

情報を確認したところ、Mysql では null 値と空文字列に違いがあることがわかりました。COLUMN_COMMENT を挿入すると null 値が空文字列に変わるのは非常に奇妙です (理由は不明)。

select * from tablist where COLUMN_COMMENT='';を使用すると、クエリは正常に機能します。

NULL 列には、その値が NULL であるかどうかを記録するために行に追加のスペースが必要です。MyISAM テーブルの場合、各 NULL 列は 1 ビット余分に占有し、最も近いバイトに切り上げられます。

MySQL の myisam エンジンでは、null 値は追加のストレージ スペース (1 ビット) を占有しますが、空の文字列はまったくスペースを占有しません。同時に、B ツリー インデックスには null 値を格納できないため、データ量が多い場合に重大なパフォーマンスの問題が発生します。

2 つのクエリ方法も異なります。null 値クエリでは、is null/is not null クエリが使用されますが、空の文字列は = または != を使用してクエリできます。

要約する

以上が、Mysql の NULL と空文字列についてご紹介した内容です。お役に立てれば幸いです。ご質問があれば、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQLサーバーは--read-onlyオプションで実行されているため、このステートメントを実行できません
  • mysql データベースmysql: [エラー] 不明なオプション ''--skip-grant-tables''
  • MySQL ビューの一貫性を確保する方法の詳細な説明 (チェック オプション付き)
  • MySQL に絵文字を保存するときに表示されるエラー メッセージ「java.sql.SQLException: 文字列値が正しくありません:'\xF0\x9F\x92\xA9\x0D\x0A...'」の解決方法
  • ODBC経由でMySQLとPHPを任意のデータベースに接続する例
  • Ubuntu で apt-get を使用して mysql をインストールおよび完全にアンインストールする方法の詳細な説明
  • AES_ENCRYPT() と AES_DECRYPT() を使用して MySQL を暗号化および復号化する正しい方法の例
  • mysqlサーバーは--skip-grant-tablesオプションで実行されています
  • pt-heartbeat を使用して MySQL レプリケーションの遅延を監視する方法の詳細な説明
  • MySQL pt-slave-restart ツールの使い方の紹介

<<:  DockerはMariaDBのサブライブラリとサブテーブル、および読み書き分離機能を実装します

>>:  トップ 10 Js 画像処理ライブラリ

推薦する

Win10 での MySQL 8.0 ログインでユーザー 'root'@'localhost' のアクセスが拒否される (パスワード使用: YES) 問題の解決方法

最近、MySQL を学び始めました。インストールはスムーズに進み、インターネット上の既成のチュートリ...

JS は複数のタブを切り替えるカルーセルを実装します

カルーセルアニメーションは、ページの外観とインタラクティブなパフォーマンスを向上させることができます...

Linux での i3 ウィンドウ マネージャーの設定と使用に関するチュートリアル

この記事では、Fedora 28 に i3 をインストールして簡単に設定する方法を説明します。 1....

ショートカットアイコンとアイコンコードの違いの紹介

ステートメント 1: <link rel="shortcut icon" ...

MySQL で重複を削除するには、distinct または group by を使用する必要がありますか?

序文group by と distinctive のパフォーマンス比較について: インターネット上の...

MySQL 8.0.24 リリースノートのいくつかの改善点

目次1. 接続管理2. オプティマイザレベルでの改善3. 機能の改善4. パフォーマンススキーマの最...

JavaScript ES6 モジュールの詳細な説明

目次0. モジュールとは何か1.モジュールの読み込み1.1 方法1 1.2 方法2 2. 輸出と輸入...

VUEユニアプリ開発環境についての簡単な説明

目次1. HBuilderXビジュアルインターフェースを通じて2. vue-cliコマンドで実行する...

MYSQL 演算子の概要

目次1. 算術演算子2. 比較演算子3. 論理演算子4. ビット演算子5. 演算子の優先順位1. 算...

MySQLクエリ文を書き換える3つの戦略

目次複雑なクエリとステップバイステップのクエリクエリステートメントを分割する共同クエリの分解問題のあ...

Vueはボタン切り替え画像を実装します

この記事では、ボタン切り替え画像を実現するためのVueの具体的なコードを例として紹介します。具体的な...

MySQL構成SSL証明書ログインの実装

目次序文1. MySQLはSSL構成を有効にする1.1 SSLが有効になっているかどうかを確認する1...

Vue-CLI3.xはプロジェクトをサーバーに自動的にデプロイします

目次序文1. scp2をインストールする2. テスト/本番環境サーバーのSSHリモートログインアカウ...

Adobe Brackets の簡単な使い方のグラフィックチュートリアル

Adobe Brackets は、HTML、CSS、JavaScript 用のオープンソースでシンプ...

MySQL 8で追加された3つの新しいインデックスは、非表示、降順、関数です。

目次MySQL 8 の隠しインデックス、降順インデックス、関数インデックス1. 隠しインデックス1....