47 votes

La façon dont beaucoup de texte UTF-8 s'inscrit dans une base de données MySQL "champ" Texte?

Selon MySQL, un text colonne contient 65 535 octets.

Donc, si ce légitime de la frontière alors qu'il fait seulement tenir environ 32k de caractères UTF-8, à droite? Ou est-ce l'un de ces "floue" les limites où le gars qui a écrit les docs ne peut pas dire des caractères à partir d'octets et il sera effectivement permettre de ~64 ko de caractères UTF-8 si la valeur est quelque chose comme utf8_general_ci?

74voto

Wolph Points 28062

Un text colonne peut être jusqu'à 65,535 octets.

Un utf-8 personnage peut être jusqu'à 3 octets.

Alors... votre limite réelle peuvent être 21,844 caractères.

Voir le manuel pour plus d'info: http://dev.mysql.com/doc/refman/5.1/en/string-type-overview.html

Une chaîne de longueur variable. M représente le maximum de la longueur de la colonne dans des personnages. La gamme de M est 0 à De 65 535. La longueur maximale réelle d'un VARCHAR est soumis au maximum taille de la ligne (65 535 octets, ce qui est partagé entre toutes les colonnes) et le jeu de caractères utilisé. Par exemple, utf8 les personnages peuvent nécessiter jusqu'à trois octets par caractère, de sorte qu'un VARCHAR colonne qui utilise le caractère utf8 peut être déclarée à un maximum de 21,844 caractères.

11voto

Warren Young Points 16324

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.

2voto

Lukasz Points 9471

Toutefois, lorsqu'il est utilisé comme clé primaire, MySQL suppose que chaque limite de la taille de la colonne de ajoute 3 octets de la clé.

mysql> alter table test2 modify code varchar(333) character set utf8;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table test2 modify code varchar(334) character set utf8;
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes

Eh bien, à l'aide de longues colonnes de la chaîne en tant que clé primaire est généralement un lit pratique, cependant, je suis tombé sur ce problème lorsque l'on travaille avec des bases de données commerciales (!) produit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X