導入 保存時と読み取り時に CHAR 型と VARCHAR 型の違いを本当にご存知ですか? まずいくつかの結論を述べたいと思います。 1. CHAR は、ユーザーがデータを挿入するときに末尾にスペースを含めるかどうかに関係なく、保存する前に常にスペースで埋められます。 2. VARCHAR は格納時にスペースを埋めて格納しませんが、挿入時にユーザーが明示的にスペースを追加した場合は、そのまま格納され、削除されません。 3. データを読み取るとき、CHAR は常に末尾のスペースを削除します (書き込み時にスペースが含まれている場合でも)。 4. データを読み取るとき、VARCHAR は常に以前に格納された値を忠実に取得します (格納時に末尾のスペースがある場合、それは保持され続け、CHAR のように末尾のスペースは削除されません)。 以下はテスト検証プロセスです。 1. CHAR型をテストする テーブル構造: テーブル `tchar` を作成します ( `id` int(10) unsigned NOT NULL DEFAULT '0', `c1` char(20) NOT NULL デフォルト '' 主キー (`id`) )ENGINE=InnoDB デフォルト文字セット=utf8mb4; いくつかのレコードを挿入します: tchar値に挿入します(1、concat('a'、repeat(' '、19))); tchar値に挿入します(2、concat(' '、repeat('a'、19))); tchar値に挿入します(3、 'a'); tchar値に挿入します(4、 ' '); tchar値に挿入(5、''); ストレージ構造を表示します。 (1) INFIMUMレコードオフセット:99 ヒープ番号:0 ... (2) SUPREMUMレコードオフセット:112 ヒープ番号:1 ... (3)通常レコード オフセット:126 ヒープ番号:2 ... <- id=1 (4) 通常レコード オフセット:169 ヒープ番号:3 ... <- id=2 (5) 通常レコード オフセット:212 ヒープ番号:4 ... <- id=3 (6) 通常レコード オフセット:255 ヒープ番号:5 ... <- id=4 (7) 通常レコード オフセット:298 ヒープ番号:6 ... <- id=5 これを見ると少し混乱しますか? 私がお勧めしたツールを覚えていますか? こちらをご覧ください: innblock | InnoDB ページ監視ツール。 ご覧のとおり、文字列の長さに関係なく、各レコードは実際には 43 (169-126=43) バイトを占めます。したがって、結論1が成り立ちます。 tchar テーブルを読み取った結果を見てみましょう。 tcharからid、concat('000'、c1、'$$$')、length(c1)を選択します。 +----+----------------------------+------------+ | id | 連結('000',c1,'$$$') | 長さ(c1) | +----+----------------------------+------------+ | 1 | 000a$$$ | 1 | <- 末尾のスペースを削除 | 2 | 000 aaaaaaaaaaaaaaaaaaaa$$$ | 20 | | 3 | 000a$$$ | 1 | | 4 | 000$$$ | 0 | <- 末尾のスペースを削除すると、結果は id=5 と同じになります | 5 | 000$$$ | 0 | +----+----------------------------+------------+ 2. VARCHAR型のテスト テーブル構造: テーブル `tvarchar` を作成します ( `id` int(10) unsigned NOT NULL DEFAULT '0', `c1` varchar(20) NOT NULL デフォルト '' 主キー (`id`) ) エンジン=InnoDB デフォルト文字セット=utf8mb4 いくつかのレコードを挿入します: tvarchar値に挿入します(1、concat('a'、repeat(' '、19))); tvarchar値に挿入します(2、concat(' '、repeat('a'、19))); tvarchar値に挿入します(3、 'a'); tvarchar値に挿入します(4、 ' '); tvarchar値に挿入(5、''); tvarchar値に挿入(6、''); ストレージ構造を表示します。 (1) INFIMUMレコードオフセット:99 ヒープ番号:0 ... (2) SUPREMUMレコードオフセット:112 ヒープ番号:1 ... (3)通常レコード オフセット:126 ヒープ番号:2 ... <- id=1 (4) 通常レコード オフセット:169 ヒープ番号:3 ... <- id=2 (5) 通常レコード オフセット:212 ヒープ番号:4 ... <- id=3 (6) 通常レコード オフセット:236 ヒープ番号:5 ... <- id=4 (7) 通常レコード オフセット:260 ヒープ番号:6 ... <- id=5 (8) 通常レコード オフセット:283 ヒープ番号:7 ... <- id=6 いくつかのレコードのバイト数は 43、43、24、24、23、23 であることがわかります (最後のレコードは id=5 のレコードと同じです)。 tvarchar テーブルを読み取った結果を見てみましょう。 tvarchar から id、concat('000'、c1、'$$$')、length(c1) を選択します。 +----+----------------------------+------------+ | id | 連結('000',c1,'$$$') | 長さ(c1) | +----+----------------------------+------------+ | 1 | 000a $$$ | 20 | <- 読み取り結果では末尾のスペースは削除されません | 2 | 000 aaaaaaaaaaaaaaaaaa$$$ | 20 | | 3 | 000a$$$ | 1 | | 4 | 000 $$$ | 1 | <- このスペースは読み取り結果では削除されません | 5 | 000$$$ | 0 | | 6 | 000$$$ | 0 | +----+----------------------------+------------+ 一般的に、2 つの結論を導き出すことができます。 最後に、ドキュメントに何が書かれているか見てみましょう。
上記のテストで使用されたバージョンと環境は次のとおりです。 mysql> バージョンを選択()\G ... バージョン(): 8.0.15 mysql> @@sql_mode\G を選択 ... @@sql_mode: ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_ENGINE_SUBSTITUTION 参照ドキュメント 11.4.1 CHAR 型と VARCHAR 型、https://dev.mysql.com/doc/refman/5.7/en/char.html 上記はMySQL CHARとVARCHARストレージの違いの詳細な内容です。MySQL CHARとVARCHARの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: jsを使用してスライダーをドラッグする効果を実現します
>>: ServerSocketのデフォルトIPバインディングの実装プロセスの詳細な説明
1. バックアップスクリプトを書く 著者:www.yumi-info.com 日付:20171222...
この記事では、vueの大画面表示適応の具体的なコードを参考までに紹介します。具体的な内容は以下のとお...
1. 最初の方法は、ローカルのTomcatを起動してJSPを表示することです。 tomcatのweb...
目次スロークエリログとは何ですか?スロークエリを有効にする方法ログ分析ツール mysqldumpsh...
この記事の例では、スターフラッシュ効果を実現するためのjsの具体的なコードを参考までに共有しています...
フレックスレイアウトを使用すると、9つの正方形のグリッドであれば、図に示すように均等に分割できます。...
まず、イメージをプルします(またはコンテナを作成するだけで、自然にプルされます)。 docker p...
目次データ列を分離するプレフィックスインデックスとインデックスの選択性データ列を分離するMySQL ...
1. メニューバーで「編集」→「仮想ネットワーク エディター」を選択して仮想ネットワーク エディタ...
目次I. 概要2. 従来の多段階イメージ構築3. Buildkitを使用してイメージをビルドする4....
1 分で最初の Web ページを作成します。簡単な Web ページを作ってみましょう。ぜひフォローし...
私は最近、多くの音楽に特化した Linux ディストリビューションの 1 つである Audiovis...
1. CentOS 7 と CentOS 8 のネットワーク構成の違い: VMware Workst...
dig - DNS ルックアップ ユーティリティドメイン名のアクセス障害が発生した場合、ドメイン名の...
前回の記事では、クロステーブル更新について書きました。自分が書いた SQL を見たとき、自分がバカみ...