Esta resposta apareceu no topo dos meus resultados de pesquisa do Google, mas não estava correta, então:
A confusão é provavelmente devido a diferentes versões do mysql sendo testadas.
- A versão 4 conta bytes
- A versão 5 conta caracteres
http://dev.mysql.com/doc /refman/5.0/en/string-type-overview.html
MySQL interpreta especificações de comprimento em definições de colunas de caracteres em unidades de caracteres. (Antes do MySQL 4.1, os comprimentos das colunas eram interpretados em bytes.) Isso se aplica aos tipos CHAR, VARCHAR e TEXT.
Curiosamente (eu não tinha pensado nisso) o comprimento máximo de uma coluna varchar é afetado por utf8 da seguinte forma:
O comprimento máximo efetivo de um VARCHAR no MySQL 5.0.3 e posterior está sujeito ao tamanho máximo da linha (65.535 bytes, que é compartilhado entre todas as colunas) e ao conjunto de caracteres usado. Por exemplo, os caracteres utf8 podem exigir até três bytes por caractere, portanto, uma coluna VARCHAR que usa o conjunto de caracteres utf8 pode ser declarada com um máximo de 21.844 caracteres.