varchar列の長さは、テーブルの作成時に宣言した長さに固定されます。長さは、0〜255(MySQL 5.0.3より前)および0〜65,535(MySQL 5.0.3以降)の任意の値にすることができます。
varcharのストレージは、文字列の長さを宣言するために1バイトまたは2バイトが追加されたデータのバイトです。最大長が255以下の場合、1バイトの長さのみが追加されます。
alter tableを使用して最大長を変更する場合、定義された最大長が255未満であれば、データストレージサイズは影響を受けません。最大長を255より上に増やす場合、2バイトを強制するかどうかはストレージエンジン次第です。 255未満の値ではなく、その場合、行ごとに1バイトずつ増加します。
charは常に必要なスペースを使用するため、charタイプはvarcharとは異なります。したがって、char(10)とvarchar(10)があり、それぞれに「hello」のみが格納されている場合、charは10バイトすべてを使用し、vharcharは6バイトを保持します( helloの場合は5、長さの場合は1)。したがって、varchar列のサイズを変更しても、char型の場合のように多くのストレージスペースが割り当てられることはありません。
今の本当の問題は、なぜPHPにvarcharサイズを操作させたいのかということです。大量のテキスト(65,535バイト以上)を保持でき、動的でも必要な最小限のスペースのみを使用する可変長フィールドが必要な場合は、理由に応じてサイズを指定する必要があります。おそらく、TEXTタイプの方が状況に適している可能性があります。 ?