タイプVARCHAR(15)
のフィールドを持つテーブルに列があり、長さ16のデータを挿入しようとすると、MySQLは次のエラーを表示します
Data too long for column 'testname' at row 1
MySQLのVARCHARフィールドが固定長になる理由を誰かが知っていますか?また、与えられたサイズに基づいて、VARCHARフィールドはレコードごとに何バイトかかりますか?
カラムをvarchar(15)
に設定した場合、許可される最大バイト数は15です。したがって、15を超える列をサポートするように変更しない限り、15文字を超える列を渡すことはできません。4文字の文字列を格納する場合使用可能な15バイトのうち約4バイトのみを使用する必要がありますが、char(15)
を使用した場合、他の11バイトは空のバイトで埋められます。
http://dev.mysql.com/doc/refman/5.0/en/char.html
(私のバイト計算はおそらく-1/+ 1またはそのようなものなので、おそらくオフでした)。
MySQL 5.0マニュアル から:
VARCHAR列の値は可変長文字列です。長さは、MySQL 5.0.3より前は0〜255、5.0.3以降のバージョンでは0〜65,535の値として指定できます。 MySQL 5.0.3以降のVARCHARの有効な最大長は、最大行サイズ(すべての列で共有される65,535バイト)と使用される文字セットの影響を受けます。
VARCHARを使用するのは、列が保持する必要のあるデータが特定の長さを超えることが決してないcertainであり、それでも私は慎重です。テキスト文字列を格納している場合は、TEXTタイプの1つを使用する傾向があります。
バイトの使用方法の詳細については、 MySQLストレージ要件 を確認してください。
小さな余分なローカルノート。使用されるバイト数は、使用しているエンコード方式によって異なります。 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)
を使用した場合、データは15バイトいっぱいになるようにデータが右パディングされるため、 'abc'でも15バイトを使用します。