La diferencia entre el límite de longitud del tipo de datos varchar de MySQL y otros tipos de caracteres en detalle

 

carbonizarse

Longitud fija, hasta 255 caracteres, el espacio al final se eliminará por defecto

¿Cuándo elegir el almacenamiento de tipo char?

1 La longitud de los datos es similar al valor después del cifrado MD5 de la identificación del número de teléfono móvil

2 La cadena corta relativa a varchar puede ahorrar espacio en la longitud de almacenamiento

3 Los campos que se actualizan con frecuencia no cambiarán de longitud en comparación con varchar y no generarán fragmentación de almacenamiento

 

varchar

El tipo varchar es diferente del tipo char para cadenas de longitud variable

Utilice un byte para almacenar la longitud cuando la longitud del carácter no exceda de 255

Use dos bytes para almacenar la longitud cuando exceda 255

La suma de varchar en cada línea no debe exceder los 65535 bytes. Si desea almacenar cadenas más largas, se recomienda utilizar el formato de texto

Dado que varchar es de longitud variable y utiliza un byte para almacenar la longitud cuando no supera los 255 caracteres, ¿significa que varchar (4) y varchar (100) están completos cuando se almacenan contenido de cuatro caracteres como "abcd"? ?

  MySQL utiliza un ancho fijo para el campo varchar en la memoria cuando se consulta en lugar del ancho de longitud variable durante el almacenamiento, especialmente la tabla temporal invisible creada durante la consulta, por lo que es apropiado elegir el atributo de campo de acuerdo con su propio negocio para elegir el más adecuado. y el más pequeño La longitud del para mejorar la velocidad de consulta y reducir la sobrecarga del servidor de base de datos

 

¿Cuándo elegir la columna varchar para el almacenamiento?

1 La longitud máxima de la columna de cuerdas es mucho mayor que la longitud promedio. Dé rienda suelta a las características de la longitud variable

2 Las columnas de cadena rara vez se actualizan. Debido a que una página de memoria del motor InnoDB es de 16k, la actualización frecuente de campos de longitud variable puede causar fragmentación de la memoria debido a la fragmentación de las páginas de memoria. 

3 Juego de caracteres de varios bytes como utf-8 

1. Cambios de tipo varchar

La longitud máxima del tipo varchar de la base de datos MySQL en las versiones inferiores a 4.1 está limitada a 255, y el rango de datos puede ser de 0 ~ 255 o 1 ~ 255 (dependiendo de la base de datos de las diferentes versiones). En MySQL 5.0 y superior, la longitud del tipo de datos varchar es compatible con 65535, lo que significa que se pueden almacenar 65,532 bytes de datos, y los bits de inicio y final ocupan 3 bytes, es decir, en 4.1 O los datos en el siguiente las versiones que deben almacenarse en un formato fijo de TEXTO o BLOB se pueden almacenar en un varchar de longitud variable, lo que puede reducir eficazmente el tamaño del archivo de la base de datos.

El tipo varchar de la base de datos MySQL se encuentra en la versión siguiente 4.1, nvarchar (almacena los caracteres del tipo de datos Unicode) ya sea un carácter o un carácter chino, se almacena como 2 bytes y generalmente se usa para chino u otro Entrada de idioma Fácil de distorsionar; varchar: los caracteres chinos son 2 bytes, otros caracteres se almacenan como 1 byte, varchar es adecuado para ingresar inglés y números.

Debajo de la versión 4.0, varchar (20) se refiere a 20 bytes. Cuando se almacenan caracteres chinos UTF8, solo se pueden almacenar 6 (3 bytes por carácter chino); por encima de la versión 5.0, varchar (20) se refiere a 20 caracteres, independientemente de si es almacenando números, letras o caracteres chinos UTF8 (cada carácter chino es de 3 bytes), se pueden almacenar 20 y el tamaño máximo es 65532 bytes; varchar (20) es solo 20 bytes en Mysql4, pero Mysql5 tiene diferentes tamaños de almacenamiento según diferentes codificaciones. Las reglas específicas son las siguientes:

a) Limitaciones de almacenamiento

El campo varchar almacena el contenido real por separado fuera del índice agrupado. El comienzo del contenido usa de 1 a 2 bytes para indicar la longitud real (se requieren 2 bytes cuando la longitud excede 255), por lo que la longitud máxima no puede exceder 65535.

b) Límite de longitud de codificación

Si el tipo de carácter es gbk, cada carácter ocupa un máximo de 2 bytes y la longitud máxima no puede superar los 32766;

Si el tipo de carácter es utf8, cada carácter ocupa como máximo 3 bytes y la longitud máxima no puede exceder 21845.

Si la definición excede el límite anterior, el campo varchar se convertirá a la fuerza al tipo de texto y se generará una advertencia.

c) Límite de longitud de línea

Lo que causa el límite de longitud varchar en aplicaciones prácticas es la longitud de una definición de línea. MySQL requiere que la longitud definida de una fila no pueda exceder 65535 . Si la longitud de la tabla definida excede este valor, se le solicitará

ERROR 1118 (42000): El tamaño de la fila es demasiado grande. El tamaño máximo de fila para el tipo de tabla utilizado, sin contar los BLOB, es 65535. Debe cambiar algunas columnas a TEXTO o BLOB。

2. La diferencia entre CHAR (M) y VARCHAR (M)

La longitud de la columna definida por CHAR (M) es fija, el valor de M puede estar entre 0 y 255. Al guardar los valores de CHAR, llene los espacios a su derecha para alcanzar la longitud especificada. Cuando se recupera el valor CHAR, se elimina el espacio final. No se realiza ninguna conversión de casos durante el almacenamiento o la recuperación. CHAR es muy conveniente para almacenar datos de longitud fija. El índice en el campo CHAR es muy eficiente. Por ejemplo, si define char (10), no importa si los datos que almacena alcanzan los 10 bytes, ocuparán 10 bytes de espacio, que es insuficiente Se llena automáticamente de espacios.

La longitud de la columna definida por VARCHAR (M) es una cadena de caracteres de longitud variable. El valor de M puede estar entre 0 y 65535. (La longitud efectiva máxima de VARCHAR está determinada por el tamaño máximo de fila y el juego de caracteres utilizado. La extensión máxima total es de 65.532 palabras. Sección). Cuando se guarda el valor VARCHAR, solo se guarda el número requerido de caracteres y se agrega un byte para registrar la longitud (si la longitud declarada de la columna excede 255, se usan dos bytes). Los valores VARCHAR no se completan cuando se guardan. Cuando el valor se guarda y se recupera, permanece el espacio final, que se ajusta al SQL estándar. Varchar almacena datos de longitud variable, pero la eficiencia de almacenamiento no es tan alta como CHAR. Si el posible valor de un campo es de longitud variable, solo sabemos que no puede superar los 10 caracteres, y lo más rentable es definirlo como VARCHAR (10). La longitud real del tipo VARCHAR es la longitud real de su valor + 1. ¿Por qué "+1"? Este byte se utiliza para almacenar la longitud real utilizada. En términos de espacio, varchar es apropiado, en términos de eficiencia, char es apropiado. La clave es encontrar una compensación basada en la situación real.

La mayor diferencia entre CHAR y VARCHAR es que uno tiene una longitud fija y el otro es una longitud variable. Debido a la longitud variable, la cadena real se almacena más un byte para registrar la longitud de la cadena (si excede 255, se requieren dos bytes). Si el valor asignado a una columna CHAR o VARCHAR excede la longitud máxima de la columna, el valor se recorta para ajustarlo. Si el carácter recortado no es un espacio, se generará una advertencia. Si recorta caracteres que no son espacios, provocará un error (no una advertencia) y deshabilitará la inserción de valores utilizando el modo SQL estricto.

3. La diferencia entre los tipos VARCHAR y TEXT y BlOB

Los tipos VARCHAR, BLOB y TEXT son tipos de longitud variable y sus requisitos de almacenamiento dependen de la longitud real del valor de la columna (indicado por L en la tabla anterior), en lugar del tamaño máximo posible del tipo. Por ejemplo, una columna VARCHAR (10) puede almacenar una cadena con una longitud máxima de 10. El almacenamiento real debe ser la longitud de la cadena, más 1 byte para registrar la longitud de la cadena. Para la cadena 'abcd', L es 4 y el requisito de almacenamiento es 5 bytes.

Los tipos BLOB y TEXT requieren 1, 2, 3 o 4 bytes para registrar la longitud del valor de la columna, dependiendo de la longitud máxima posible del tipo. VARCHAR necesita definir el tamaño, con un límite máximo de 65535 bytes; TEXT no lo necesita. Si asigna un valor que excede la longitud máxima del tipo de columna a una columna BLOB o TEXT, el valor se trunca para ajustarlo.

Un BLOB es un objeto binario grande que puede contener una cantidad variable de datos. Los cuatro tipos de BLOB TINYBLOB, BLOB, MEDIUMBLOB y LONGBLOB difieren solo en la longitud máxima de valores que pueden almacenar.

BLOB puede almacenar imágenes, TEXT no, TEXT solo puede almacenar archivos de texto sin formato. Los cuatro tipos de TEXTO TINYTEXT, TEXT, MEDIUMTEXT y LONGTEXT corresponden a los cuatro tipos de BLOB y tienen la misma longitud máxima y requisitos de almacenamiento. La única diferencia entre los tipos BLOB y TEXT es que la clasificación y comparación de los valores BLOB se realizan de manera sensible a mayúsculas y minúsculas, mientras que los valores TEXT no distinguen entre mayúsculas y minúsculas. En otras palabras, un TEXTO es un BLOB que no distingue entre mayúsculas y minúsculas.

4. Resume la diferencia entre char, varchar y text

La diferencia en la longitud, el rango de caracteres es 0 ~ 255, varchar es el 64k más largo, pero tenga en cuenta que 64k aquí es la longitud de toda la fila, tenga en cuenta otras columnas, y si no hay nulo, ocupará un bit, right Los diferentes conjuntos de caracteres tienen diferentes longitudes efectivas, como utf8, hasta 21845, y se deben eliminar otras columnas, pero varchar es suficiente para el almacenamiento en general. Si encuentra texto grande, considere usar texto, que puede alcanzar hasta 4G.

La eficiencia es básicamente char> varchar> text, pero si está utilizando el motor Innodb, se recomienda utilizar varchar en lugar de char

Char y varchar pueden tener valores predeterminados y el texto no puede especificar valores predeterminados

Todavía es necesario que la base de datos elija el tipo de datos apropiado para el almacenamiento, lo que tiene un cierto impacto en el rendimiento. Aquí hay dos partes de registros del sistema. Para el tipo int, si no necesita acceder a valores negativos, es mejor agregar unsigned; para campos que a menudo aparecen en declaraciones where, considere agregar índices, y la configuración es especialmente adecuada para agregar índices .

Supongo que te gusta

Origin blog.csdn.net/JineD/article/details/111875719
Recomendado
Clasificación