Les caractères UTF-8 peut prendre jusqu'à 4 octets, et non pas 2 comme vous êtes supposé. UTF-8 est d'une largeur variable de codage, en fonction du nombre de bits significatifs dans le point de code Unicode:
- 7 bits et sous le point de code Unicode: 1 octets en UTF-8
- 8 à 11 bits: 2 octets en UTF-8
- De 12 à 16 bits: 3 octets
- 17 à 21 bits: 4 octets
L' origine de l'UTF-8 spec permet l'encodage jusqu'à 31 bits des valeurs Unicode, en prenant comme beaucoup de comme 6 octets pour coder en UTF-8. Après l'UTF-8 est devenu populaire, le Consortium Unicode a déclaré qu'ils n'utiliseront jamais les points de code au-delà de 221 - 1. C'est maintenant au standard RFC 3629.
MySQL actuellement (c'est à dire la version 5.6) prend uniquement en charge le format Unicode Plan Multilingue de Base des personnages, pour qui UTF-8 besoins jusqu'à 3 octets par caractère. Cela signifie que le courant de la réponse à votre question est que votre TEXT
champ peut contenir au moins 21,844 caractères.
Selon la façon dont vous le regardez, les limites actuelles sont plus élevés ou plus bas que:
Si l'on suppose, comme je le fais, que le BMP limitation sera finalement levé dans MySQL ou de l'un de ses fourches, vous ne devriez pas compter sur la capacité de stocker plus de 16 383 caractères dans ce champ si votre client MySQL permet arbitraire Unicode de saisie de texte.
Sur l'autre main, vous pouvez être en mesure d'exploiter le fait que l'UTF-8 est une variable de la largeur de l'encodage. Si vous savez que votre texte est surtout plaine anglais seulement avec le occasionnel de caractères non-ASCII, votre efficace dans la pratique, la limite pourrait approcher le maximum de 64 KO - 1 limite de caractères.