mysqlのVACHARの最大の長さはいったいいくらですか


今日グループで質問がありました.
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までしか保存できません.