Dokumentacja MySQL mówi, że od 5,0 długości varchar odnoszą się do jednostek znaków, a nie bajtów. Niedawno natknąłem się na problem polegający na tym, że podczas wstawiania wartości, które powinny pasować do kolumny varchar, która została wyznaczona, otrzymywałem ostrzeżenia o danych.Wielkość kolumny MySQL UTF8 varchar
I replikowane ten problem z prostym stole 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)
Następnie dodaje wielokrotność 10 znaków wartości o różnej ilości znaków 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)
Myślę, że to pokazuje, że rozmiar varchar jest nadal definiowany w bajtach lub przynajmniej nie jest dokładny w jednostkach znaków.
Pytanie brzmi, czy rozumiem poprawnie dokumentację i czy jest to błąd? Czy błędnie interpretuję dokumentację?
Nie pomaga ci to w najmniejszym, ale [na sqlfiddle] (http://sqlfiddle.com/#!2/829b8/2), który twierdzi, że jest 5.5.20, jeden nie cierpi z powodu tego problemu. Być może był to błąd, który został naprawiony (przeszukano, ale nie znalazłem raportu o błędzie). – eggyal
Ten sam problem występuje w wersji 5.5.19, więc może to być wersja, która została naprawiona. Sprawdzanie uwag do wydania nie zawiera żadnej wzmianki o varcharach ani UTF8 – sreimer