MySQLのドキュメントによると、5.0以降、varcharの長さはバイトではなく文字単位を参照します。ただし、最近、指定されたvarchar列に収まるはずの値を挿入すると、データが切り捨てられるという警告が表示されるという問題が発生しました。
この問題をv5.1の単純なテーブルで複製しました
mysql> show create table test\G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`string` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
次に、UTF8文字の量が異なる複数の10文字の値を挿入しました
mysql> insert into test (string) values
-> ('abcdefghij'),
-> ('ãáéíçãáéíç'),
-> ('ãáéíç67890'),
-> ('éíç4567890'),
-> ('íç34567890');
Query OK, 5 rows affected, 4 warnings (0.06 sec)
Records: 5 Duplicates: 0 Warnings: 4
mysql> show warnings;
+---------+------+---------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------+
| Warning | 1265 | Data truncated for column 'string' at row 2 |
| Warning | 1265 | Data truncated for column 'string' at row 3 |
| Warning | 1265 | Data truncated for column 'string' at row 4 |
| Warning | 1265 | Data truncated for column 'string' at row 5 |
+---------+------+---------------------------------------------+
mysql> select * from test;
+------------+
| string |
+------------+
| abcdefghij |
| ãáéíç |
| ãáéíç |
| éíç4567 |
| íç345678 |
+------------+
5 rows in set (0.00 sec)
これは、varcharサイズがまだバイト単位で定義されているか、少なくとも文字単位では正確ではないことを示していると思います。
問題は、ドキュメントを正しく理解しているか、これはバグかということです。または、ドキュメントを誤って解釈していますか?