タイプのフィールドを持つテーブルに列がありVARCHAR(15)
、長さ16のデータを挿入しようとすると、MySQLは次のようなエラーを出します。
Data too long for column 'testname' at row 1
MySQLのVARCHARフィールドが固定長になる理由を誰かが知っていますか?また、指定されたサイズに基づいて、VARCHARフィールドはレコードごとに何バイトを使用しますか?
VARCHAR 列の値は可変長文字列です。長さは、MySQL 5.0.3 より前では 0 から 255、5.0.3 以降では 0 から 65,535 の値として指定できます。MySQL 5.0.3 以降での VARCHAR の有効な最大長は、最大行サイズ (すべての列で共有される 65,535 バイト) と使用される文字セットの影響を受けます。
列が保持する必要があるデータが特定の長さを決して超えないことが確実な場合にのみ、VARCHAR を使用します。テキスト文字列を保存する場合、TEXT タイプのいずれかを使用する傾向があります。
バイトの使用方法の詳細については、 MySQL ストレージ要件を確認してください。
列をvarchar(15)
許可される最大バイト数が15になるように設定した場合、15文字を超える文字列をサポートするように列を変更せずに15文字を超える文字列を渡すことはできません。4文字の文字列を格納する場合は、約4バイトしか使用しないでください。可能性のある15の、一方、使用char(15)
した場合、他の11は空のバイトで埋められます。
http://dev.mysql.com/doc/refman/5.0/en/char.html
(バイト計算は常に-1 / + 1などであるため、おそらくオフでした)。
小さな余分なローカルメモ。使用されるバイト数は、使用中のエンコード方式によって異なります。latin1 エンコーディングでは 1 文字あたり 1 バイトですが、UTF8 では最大 3 バイトです。詳細については、mlambie の回答のリンクを参照してください。
ここを見ると、知りたい varchar に関するすべてがわかるはずです: http://dev.mysql.com/doc/refman/5.0/en/char.html
基本的に、選択した長さに応じて、その列の現在の文字列の長さを追跡するために 1 バイトまたは 2 バイトを使用するため、入力したデータのバイト数に 1 バイトまたは 2 バイトを加えたものが格納されます。
したがって、「abc」を入力すると、その行のその列に使用される 4 または 5 バイトになります。
使用した場合char(15)
、「abc」でも 15 バイトを使用します。これは、データが 15 バイトを完全に使用するために右側に埋め込まれているためです。