web-dev-qa-db-ja.com

MySQL VARCHARのサイズ制限

タイプVARCHAR(15)のフィールドを持つテーブルに列があり、長さ16のデータを挿入しようとすると、MySQLは次のエラーを表示します

Data too long for column 'testname' at row 1

MySQLのVARCHARフィールドが固定長になる理由を誰かが知っていますか?また、与えられたサイズに基づいて、VARCHARフィールドはレコードごとに何バイトかかりますか?

18
MySQL DBA

カラムをvarchar(15)に設定した場合、許可される最大バイト数は15です。したがって、15を超える列をサポートするように変更しない限り、15文字を超える列を渡すことはできません。4文字の文字列を格納する場合使用可能な15バイトのうち約4バイトのみを使用する必要がありますが、char(15)を使用した場合、他の11バイトは空のバイトで埋められます。

http://dev.mysql.com/doc/refman/5.0/en/char.html

(私のバイト計算はおそらく-1/+ 1またはそのようなものなので、おそらくオフでした)。

13
meder omuraliev

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ストレージ要件 を確認してください。

14
mlambie

小さな余分なローカルノート。使用されるバイト数は、使用しているエンコード方式によって異なります。 latin1エンコーディングでは1文字あたり1バイトですが、UTF8では最大3バイトです。詳細については、mlambieの回答のリンクを参照してください。

3
martin clayton

ここを見ると、知りたいvarcharのすべてがわかるはずです。 http://dev.mysql.com/doc/refman/5.0/en/char.html

基本的に、選択した長さに応じて、その列の現在の文字列の長さを追跡するために1バイトまたは2バイトを使用するため、入力したデータのバイト数に1バイトまたは2バイトを加えたものが格納されます。

したがって、「abc」を入力すると、その行のその列に使用される4または5バイトになります。

char(15)を使用した場合、データは15バイトいっぱいになるようにデータが右パディングされるため、 'abc'でも15バイトを使用します。

1
James Black