このたび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 行目