sql >> データベース >  >> RDS >> Mysql

varchar(20)とvarchar(50)は同じですか?

    MySQLはストレージエンジンの選択肢を提供します。データの物理ストレージは、ストレージエンジンによって異なります。

    MyISAMストレージのVARCHAR

    MyISAMでは、VARCHAR sは通常、文字列の実際の長さに1バイトまたは2バイトの長さを加えたものだけを占めます。これは、行ロック機能ではなく、テーブルロックに対するMyISAMの設計上の制限によって実用化されています。パフォーマンスへの影響には、よりコンパクトなキャッシュプロファイルが含まれますが、レコードオフセットのより複雑な(より遅い)計算も含まれます。

    (実際、MyISAMはある程度の選択肢を提供します テーブル全体で発生する列タイプに応じて、固定の物理行サイズと可変の物理行サイズのテーブル形式の間。 VARCHARの発生 デフォルトのメソッドのみを変更しますが、TEXTが存在します blob force VARCHAR s同じテーブルで可変長法も使用します。)

    物理的な保存方法は、テーブルとは別の話であるインデックスでは特に重要です。 MyISAMは両方にスペース圧縮を使用します CHAR およびVARCHAR 列。つまり、どちらの場合も、データが短いほどインデックス内のスペースが少なくて済みます。

    VARCHARのInnoDBストレージ

    InnoDBは、他のほとんどの現在のリレーショナルデータベースと同様に、より高度なメカニズムを使用しています。 VARCHAR 最大幅が768バイト未満の列はインラインで格納され、予約された部屋はその最大幅に一致します。より正確には、ここ

    InnoDBは現在、インデックスでスペース圧縮を実行していません。これは、上記のMyISAMとは逆です。

    質問に戻る

    ただし、上記のすべては、バージョン間で変更される可能性のある実装の詳細にすぎません。 CHARの本当の違い およびVARCHAR はセマンティックであり、VARCHAR(20)の間のものも同様です。 およびVARCHAR(50)VARCHAR(20)に30文字の文字列を格納する方法がないことを確認する 、データベースは、予測どおりに動作するソリューションに統合されると思われるさまざまなプロセッサやアプリケーションの作業をより簡単に、より適切に定義できるようにします。これは大したことです。

    特に個人名については、この質問 あなたにいくつかの実用的なガイダンスを与えるかもしれません。とにかく、フルネームが70UTF-8文字を超える人は困っています。



    1. インデックス付きブール列と日時列のクエリのパフォーマンス

    2. Djangoは子行を追加または更新できません:外部キー制約が失敗します

    3. MySQLにSQLServerのSETNOCOUNTに相当するものはありますか?

    4. DjangoRestFrameworkのページネーションが非常に遅いカウント