導入 保存時と読み取り時に 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バインディングの実装プロセスの詳細な説明
雇用主から MySQL クエリ条件でインデックスが使用されるかどうかを尋ねられた場合、どのように答え...
序文:多くのビジネス テーブルでは、歴史的またはパフォーマンス上の理由により、最初のパラダイムに違反...
1. ダウンロード参考: 2. D:\MySQL\mysql-5.7.24 などの固定の場所に解凍し...
1. SSHリモート管理SSH の定義SSH (Secure Shell) は、主にキャラクタ イン...
Nginx (エンジン x) は、軽量で高性能な HTTP およびリバース プロキシ サーバーであり...
1. MySQLに接続するフォーマット: mysql -h ホストアドレス -u ユーザー名 -p ...
目次序文始める基本レイアウトデータバインディングイベントバインディング最適化ジッター問題を最適化する...
国慶節の休暇後、Windows アップデート後に VMware 仮想マシンが開けなくなり、「VMwa...
目次まず、スクロール バーのスタイルを変更するには、疑似要素-webkit-scrollbarを使用...
Deepin がルートユーザーとして Google Chrome ブラウザを起動できない問題を解決す...
ステップ1: MySQLドライバをダウンロードするcmdは作成されたDjangoプロジェクトディレク...
この記事では、WeChatミニプログラムのビデオ弾幕の位置をランダム化するための具体的なコードを紹介...
この記事の例では、古典的なマインスイーパゲームを実装するためのjsの具体的なコードを参考までに共有し...
MySQL の暗号化と復号化の例データの暗号化と復号化はセキュリティ分野で非常に重要です。プログラマ...
watch : データの変更を監視する(特定の値の変更イベント) vue2.x データ(){ 戻る ...