導入 保存時と読み取り時に 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バインディングの実装プロセスの詳細な説明
目次序文アイデアの起動速度Tomcat ログが文字化けしている序文Idea を再インストールしたので...
ここで、次のような項目をフォームに追加したいとします: 現在いる都市を参照します。ここで私たちが話し...
webpack をパッケージ化する前に、次の作業が完了していることを確認する必要があります。 1) ...
MySQL でカーソルを宣言する方法: 1. 変数とカーソルを宣言する 結果をvarchar(300...
Baiduで検索しました。 。 chcp コマンドを使用して、cmd の文字エンコーディングを 65...
1. Linuxサーバーは、/etc/hosts.denyを設定して、相手のIPがSSH経由でサー...
初めてwampをインストールした後、すべてのサービスが正常に使用できますが、再起動するとwampのア...
この記事では、例を使用して MySQL トリガーの簡単な使用方法を説明します。ご参考までに、詳細は以...
<br />一般的に、「標準的な Web ページ」のファイル構成は XHTML CSS ...
最近、ネイティブ JS を使用して、さらにいくつかの小さな機能を実装したいと思っています。現在、ブロ...
目次1. ES 構文のゲッターとセッター2. ES構文でのdefineProperty 3. Vue...
MySQL インストール手順 MySQL は、スウェーデンの MySQL AB によって開発された...
まずデータ テーブルを作成しましょう。 使用テスト; テーブル「従業員」を作成します( emp_no...
ビジネスシナリオ: 訪問者の訪問状況を記録する必要があるが、繰り返し記録することはできない挿入する前...
目次1. デジタル列挙2. 文字列の列挙3. 逆マッピング4. 異種列挙5. 定数列挙6. 列挙メン...