MySQLのVARCHARの長さとか

このたびMySQLさんと真剣なお付き合いをすることになり、いろいろ試行錯誤しています。
バージョンはCentOS 6.2 の mysql-server-5.1.61-1.el6_2.1.x86_64。

オンラインマニュアル 10.4.1. CHAR と VARCHAR タイプ
http://dev.mysql.com/doc/refman/5.1/ja/char.html

VARCHAR カラム内の値は可変長の文字列です。長さは0から65,535の値で指定できます。(VARCHAR の最大有効長さは、最大行サイズと利用される文字サイズによって決まります。最大カラム長さは65,532バイトの行サイズによります。)

VARCHARの長さに 0 を指定できる。
その場合値を格納するときに 0 文字になるよう切り捨てられる。
(使いみちが思いつかない。。。)

mysql> CREATE TABLE test ( name1 VARCHAR(0), name2 VARCHAR(1) );
Query OK, 0 rows affected (0.09 sec)

mysql> INSERT INTO test (name1, name2) VALUES('ABC','ABC');
Query OK, 1 row affected, 2 warnings (0.01 sec)

mysql> SELECT * FROM test;
+-------+-------+
| name1 | name2 |
+-------+-------+
|       | A     |
+-------+-------+
1 row in set (0.00 sec)

プライマリキーに指定するカラムの長さが 0 だと怒られる。

mysql> CREATE TABLE test ( id VARCHAR(0) , PRIMARY KEY(id) );
ERROR 1167 (42000): The used table handler can't index column 'id'

PostgreSQLのような長さの指定なしというのはできない。

mysql> CREATE TABLE test ( name1 VARCHAR );
ERROR 1064 (42000): Something is wrong in your syntax  : ')' 付近  : 1 行目