MySQL文檔說,自5.0起,varchar長度引用字符單位,而不是字節。但是,最近我遇到了一個問題,那就是在插入適合指定的varchar列的值時,我正在截取數據警告。MySQL UTF8 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)
我然後插入多個10個字符值具有不同的UTF8字符數量
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大小仍然以字節或至少定義,在字符單位中不準確。
問題是,我正確理解文檔,這是一個錯誤嗎?還是我誤解了文檔?
不是說它對你稍有幫助,而是[在sqlfiddle]上(http://sqlfiddle.com/#!2/829b8/2),聲稱它是5.5.20,不會遇到這個問題。也許這是一個已經修復的錯誤(我已經搜索過,但沒有找到錯誤報告)。 – eggyal
5.5.19中存在相同的問題,因此可能是其修復的版本。發行說明的檢查顯示沒有提及varchars或UTF8 – sreimer