utf8 consulta charset mysql utf-8

consulta - utf8mb4 mysql



¿Cuánto texto UTF-8 cabe en un campo MySQL "Texto"? (3)

Según MySQL, una columna de text tiene 65.535 bytes.

Entonces, si este es un límite legítimo, ¿realmente solo encajará en unos 32k caracteres UTF-8, verdad? ¿O es este uno de esos límites "borrosos" donde los tipos que escribieron los documentos no pueden distinguir los caracteres de los bytes y realmente permitirán ~ 64k caracteres UTF-8 si se establece en algo así como utf8_general_ci ?


Los caracteres UTF-8 pueden tomar hasta 4 bytes cada uno, no 2 como usted supone. en.wikipedia.org/wiki/Utf-8 , dependiendo del número de bits significativos en el punto de código Unicode:

  • 7 bits y menos en el punto de código Unicode: 1 byte en UTF-8
  • 8 a 11 bits: 2 bytes en UTF-8
  • 12 a 16 bits: 3 bytes
  • 17 a 21 bits: 4 bytes

La especificación UTF-8 original permite codificar valores Unicode de hasta 31 bits, y puede codificar hasta 6 bytes en formato UTF-8. Después de que UTF-8 se hizo popular, el Consorcio Unicode declaró que nunca usarán puntos de código más allá de 2 21 - 1. Esto ahora está estandarizado como RFC 3629 .

MySQL currently (es decir, la versión 5.6) solo admite los caracteres Unicode Basic Multilingual Plane , para los cuales UTF-8 necesita hasta 3 bytes por carácter. Eso significa que la respuesta actual a su pregunta es que su campo TEXT puede contener al menos 21,844 caracteres.

Dependiendo de cómo lo mires, los límites reales son más altos o más bajos que eso:

  • Si asumes, como yo lo hago, que la limitación de BMP eventualmente se eliminará en MySQL o en una de its forks , no deberías contar con poder almacenar más de 16,383 caracteres en ese campo si tu cliente MySQL permite la entrada de texto Unicode arbitrariamente .

  • Por otro lado, puede aprovechar el hecho de que UTF-8 es una codificación de ancho variable. Si sabe que su texto es en su mayoría inglés simple con solo caracteres ocasionales que no son ASCII, su límite efectivo de práctica podría acercarse al límite máximo de 64 KB - 1 carácter.


Sin embargo, cuando se usa como clave principal , MySQL asume que cada límite del tamaño de la columna agrega 3 bytes a la clave.

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

Bueno, usar columnas de cadena largas como clave principal generalmente es una práctica de cama, sin embargo, he encontrado ese problema cuando trabajo con la base de datos de un producto comercial (!).


Una columna de text puede tener hasta 65,535 bytes.

Un carácter utf-8 puede tener hasta 3 bytes.

Entonces ... tu límite real puede ser de 21,844 caracteres.

Consulte el manual para obtener más información: http://dev.mysql.com/doc/refman/5.1/en/string-type-overview.html

Una cadena de longitud variable. M representa la longitud máxima de la columna en caracteres. El rango de M es de 0 a 65,535. La longitud máxima efectiva de un VARCHAR está sujeta al tamaño máximo de fila (65.535 bytes, que se comparte entre todas las columnas) y al juego de caracteres utilizado. Por ejemplo, los caracteres utf8 pueden requerir hasta tres bytes por carácter, por lo que una columna VARCHAR que use el conjunto de caracteres utf8 puede declararse como un máximo de 21,844 caracteres.