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 画像処理ライブラリ

推薦する

MySQL Limitパフォーマンス最適化とページングデータパフォーマンス最適化の詳細な説明

MySQL Limit はセグメント内のデータベース データをクエリでき、主にページングで使用されま...

MySQL の異常なエラー ERROR: 2002 を解決する方法

最近、MySQL の起動中にエラーが発生しました。エラー メッセージは次のとおりです。 エラー 20...

HTMLフォーム送信方法のケーススタディ

フォームの送信方法をまとめると次のようになります。 1. 送信ボタンを使用して送信します。送信ボタン...

JavaScript を使用して簡単なアルゴリズムを実行する方法

目次質問1件2つの方法3 実験結果と考察質問1件ご存知のとおり、 Pycharm 、 IDLE 、 ...

Linux 仮想ホストで SourceGuardian (sg11) 暗号化コンポーネントを有効にする詳細な手順

注: sg11 弊社では Linux システム仮想ホストのセルフインストールのみサポートしております...

MySQL 1対多関連クエリのページングエラー問題の解決方法

XML価格照会のクエリデータにはリストが含まれているため、コレクションが必要です <結果マップ...

Windows での MySQL 8.0.11 インストール チュートリアル

この記事は、WindowsでのMySQL 8.0.11のインストールチュートリアルを記録しています。...

JavaScript 型検出方法の例のチュートリアル

序文JavaScriptはWebフロントエンドで広く使われている言語の一つであり、Webアプリケーシ...

Docker: /etc/default/docker の DOCKER_OPTS パラメータを変更しても反映されない

デフォルトでは、 /etc/default/docker 設定は有効になりません。docker 環境...

MySQL 実験: explain を使用してインデックスの傾向を分析する

概要インデックス作成は、MySQL で習得しなければならないスキルであり、MySQL クエリの効率を...

Linux で open-vswitch をインストールおよびアンインストールする方法

1. ソースコードからovsをコンパイルしてインストールします。依存関係をインストールします: # ...

Mysql binlog ログファイルが大きすぎる場合の解決策

目次1. 関連するbinlog設定2. binlogに関する詳細設定2.1 バイナリログモードの変更...

ふるい抽選を実施するミニプログラム

この記事の例では、ふるい抽選を実装するためのミニプログラムの具体的なコードを参考までに共有しています...

プロフェッショナルおよび非プロフェッショナルのウェブデザイン

まず、Web ページのスタイルの形成は、主に Web ページのレイアウト設計、ページの色処理、画像と...

Docker を使用した Laravel アプリケーションのデプロイ例

この記事で使用されているPHPベースイメージはphp:7.3-apacheです。この記事の Lara...