MySQL5.1 の varchar カラムの怪しい動き

追記2009-12-01:
コメントいただいた!

本件、新たに記事を一個立てた。↓
kameidの備忘録 - Sharpen the Saw!



MySQL5.1 にて、長い varchar 項目をカラムに作ろうとした際に気付いた動作。

mysql> create table test_length (
    ->     value VARCHAR(21844) 
    -> ) engine myisam;
Query OK, 0 rows affected (0.21 sec)

mysql> desc test_length;
+-------+----------------+------+-----+---------+-------+
| Field | Type           | Null | Key | Default | Extra |
+-------+----------------+------+-----+---------+-------+
| value | varchar(21844) | YES  |     | NULL    |       | 

mysql> create table test_length (
    ->     value VARCHAR(21845) 
    -> ) engine myisam;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs

mysql> create table test_length (
    ->     value VARCHAR(21846) 
    -> ) engine myisam;
Query OK, 0 rows affected, 1 warning (0.13 sec)

mysql> desc test_length;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| value | mediumtext | YES  |     | NULL    |       | 

varchar(21844) でテーブル作ると、varchar(21844) が出来る。
varchar(21846) でやると mediumtext が出来る。
ここまではいいんだけど(?)、
varchar(21845) でテーブル作ろうとすると、「ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs」というエラーが発生する。


何だこの「谷間」は。他に varchar 項目がテーブル中に存在する場合はさらにこの「谷間」が大きくなる。ちなみに、DB は UTF-8 で作成している。21845 が 65535 を3で割った数字だというところがヒントになりそうだけども今のところ原因不明。