La documentación de MySQL dice que desde 5.0, las longitudes de varchar se refieren a las unidades de caracteres, no a los bytes. Sin embargo, recientemente me encontré con un problema en el que recibía advertencias de datos truncadas al insertar valores que deberían haber encajado en la columna varchar que se designó.MySQL UTF8 varchar columna tamaño
que replican este tema con una simple tabla en 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)
que a continuación se inserta múltiples valores de 10 personajes con diferentes cantidades de caracteres 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)
creo que esto demuestra que la El tamaño de varchar todavía está definido en bytes o, al menos, no es preciso en unidades de caracteres.
La pregunta es, ¿entiendo la documentación correctamente y es esto un error? ¿O estoy malinterpretando la documentación?
No es que te ayude en lo más mínimo pero [en sqlfiddle] (http://sqlfiddle.com/#!2/829b8/2), que dice ser 5.5.20, uno no sufre este problema. Tal vez fue un error que se solucionó desde entonces (he buscado, pero no he localizado un informe de error). – eggyal
Existe el mismo problema en 5.5.19, por lo que puede ser la versión que se arregló. Una verificación de las notas de la versión no muestra ninguna mención de varchar o UTF8 – sreimer