mysqlのVACHARの最大の長さはいったいいくらですか
今日グループで質問がありました.
varcharは最大65532(最初のバイト+2つの長さバイト)しか設定できないのではないでしょうか.しかし、なぜ65533に設定できるのでしょうか.
以前は長さを記録するために2バイトがあると考えられていたので(長さが小さくても1バイトで記録できる)、この問題は退屈だったと思います
しかし、その後、グループの誰かが説明してくれたが、突然、元のことはそんなに簡単ではないことに気づいた.
MYSQL COMPACTフォーマットでは、各レコードにNULLフィールド分布を表す1バイトが記録されています.テーブルにフィールドが空であれば、最大65532までしか設定できません.フィールドが空でなければ、そのバイトは節約できます.最大65533まで定義できます.その理由は分かりません.
そこでインターネットでいくつかの資料を見て、また地元でいくつかの実験をして、もとはvacharの最大の長さは本当に不定です(空ではないフィールドがあるかどうかによって決まります)
ローカルで実験をして、innodb+latinの環境
2つ目の場合、空のフィールドを許可するときは65533の長さを加えることはできません.最大65532までしかできません.あくまで引用文のような言い方です.
ネット上でも似たような実験をしている人がいますが、参考にしてください.http://stackoverflow.com/questions/8295131/best-practise-for-sql-varchar-column-length
まとめてみると、従来のmysqlのvacharフィールドのタイプは、最大長さが65535ですが、こんなに多くのデータを格納できるわけではなく、最大65533(非空フィールドが許可されていない場合)、非空フィールドが許可されている場合は65532までしか保存できません.
varcharは最大65532(最初のバイト+2つの長さバイト)しか設定できないのではないでしょうか.しかし、なぜ65533に設定できるのでしょうか.
以前は長さを記録するために2バイトがあると考えられていたので(長さが小さくても1バイトで記録できる)、この問題は退屈だったと思います
しかし、その後、グループの誰かが説明してくれたが、突然、元のことはそんなに簡単ではないことに気づいた.
MYSQL COMPACTフォーマットでは、各レコードにNULLフィールド分布を表す1バイトが記録されています.テーブルにフィールドが空であれば、最大65532までしか設定できません.フィールドが空でなければ、そのバイトは節約できます.最大65533まで定義できます.その理由は分かりません.
そこでインターネットでいくつかの資料を見て、また地元でいくつかの実験をして、もとはvacharの最大の長さは本当に不定です(空ではないフィールドがあるかどうかによって決まります)
ローカルで実験をして、innodb+latinの環境
1
-- success
2
drop table
if
exists test;
3
create table test(name varchar(65533) not null)engine=innodb DEFAULT CHARSET=latin1
4
5
-- too large
6
drop table
if
exists test;
7
create table test(name varchar(65533))engine=innodb DEFAULT CHARSET=latin1
2つ目の場合、空のフィールドを許可するときは65533の長さを加えることはできません.最大65532までしかできません.あくまで引用文のような言い方です.
ネット上でも似たような実験をしている人がいますが、参考にしてください.http://stackoverflow.com/questions/8295131/best-practise-for-sql-varchar-column-length
1
name varchar(100) not null will be 1 byte (length) + up to 100 chars (latin1)
2
3
name varchar(500) not null will be 2 bytes (length) + up to 500 chars (latin1)
4
5
name varchar(65533) not null will be 2 bytes (length) + up to 65533 chars (latin1)
6
7
name varchar(65532) will be 2 bytes (length) + up to 65532 chars (latin1) + 1 null byte
まとめてみると、従来のmysqlのvacharフィールドのタイプは、最大長さが65535ですが、こんなに多くのデータを格納できるわけではなく、最大65533(非空フィールドが許可されていない場合)、非空フィールドが許可されている場合は65532までしか保存できません.