MySQLのマニュアルによると、5.0以降、varcharの長さは文字単位でありバイトではありません。しかし、私は最近、指定されたvarchar列に収まるはずの値を挿入するときに、切り捨てられたデータの警告が出るという問題に直面しました。 MySQL UTF8 varcharカラムサイズ
は私が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)
私は、このことを示していると思いV5.1で簡単な表で、この問題を複製しvarcharのサイズはまだバイト単位で定義されているか、少なくとも文字単位では正確ではありません。
質問は正しくドキュメントを理解していますが、これはバグですか?または私はドキュメントを誤解していますか?
しかし、それは少しでも役立ちますが、5.5.20と主張している[sqlfiddle](http://sqlfiddle.com/#!2/829b8/2)では、この問題は発生しません。おそらくそれは修正されたバグでした(私は検索しましたが、バグレポートを見つけていません)。 – eggyal
同じ問題が5.5.19に存在するため、修正されたバージョンかもしれません。リリースノートのチェックでは、varcharsやUTF8については触れていません – sreimer