Saltar al contenido

¿Equivalente de varchar (max) en MySQL?

Solución:

La longitud máxima de un varchar está sujeta al tamaño máximo de fila en MySQL, que es 64 KB (sin contar los BLOB):

VARCHAR(65535)

Sin embargo, tenga en cuenta que el límite es menor si utiliza un conjunto de caracteres de varios bytes:

VARCHAR(21844) CHARACTER SET utf8

Aquí hay unos ejemplos:

El tamaño máximo de fila es 65535, pero un varchar también incluye uno o dos bytes para codificar la longitud de una cadena determinada. Entonces, en realidad, no puede declarar un varchar del tamaño máximo de fila, incluso si es la única columna de la tabla.

mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

Pero si intentamos disminuir longitudes, encontramos la mayor longitud que funciona:

mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)

Ahora bien, si intentamos utilizar un juego de caracteres multibyte en el nivel de la tabla, encontramos que cuenta cada carácter como varios bytes. Las cadenas UTF8 no necesariamente use varios bytes por cadena, pero MySQL no puede asumir que restringirá todas sus inserciones futuras a caracteres de un solo byte.

mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead

A pesar de lo que nos dijo el último error, a InnoDB todavía no le gusta una longitud de 21845.

mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

Esto tiene mucho sentido, si calcula que 21845 * 3 = 65535, que no habría funcionado de todos modos. Considerando que 21844 * 3 = 65532, que funciona.

mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)

TLDR; MySql no tiene un concepto equivalente de varchar(max), esta es una característica de MS SQL Server.

¿Qué es VARCHAR (max)?

varchar(max) es una característica de Microsoft SQL Server.

La cantidad de datos que una columna podía almacenar en las versiones del servidor Microsoft SQL anteriores a la versión 2005 estaba limitada a 8 KB. Para almacenar más de 8 KB, tendría que usar TEXT, NTEXT, o BLOB tipos de columnas, estos tipos de columnas almacenan sus datos como una colección de páginas de 8K separadas de las páginas de datos de la tabla; admitían almacenar hasta 2 GB por fila.

La gran advertencia para estos tipos de columnas era que generalmente requerían funciones y declaraciones especiales para acceder y modificar los datos (p. Ej. READTEXT, WRITETEXT, y UPDATETEXT)

En SQL Server 2005, varchar(max) se introdujo para unificar los datos y las consultas que se utilizan para recuperar y modificar datos en columnas grandes. Los datos para varchar(max) las columnas se almacenan en línea con las páginas de datos de la tabla.

A medida que los datos de la columna MAX llenan una página de datos de 8 KB, se asigna una página de desbordamiento y la página anterior apunta a que forma una lista vinculada. diferente a TEXT, NTEXT, y BLOB los varchar(max) El tipo de columna admite la misma semántica de consulta que otros tipos de columna.

Entonces varchar(MAX) realmente significa varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING) y no varchar(MAX_SIZE_OF_A_COLUMN).

MySql no tiene un idioma equivalente.

Para obtener la misma cantidad de almacenamiento que un varchar(max) en MySql aún necesitaría recurrir a un BLOB tipo de columna. Este artículo analiza un método muy eficaz para almacenar grandes cantidades de datos en MySql de manera eficiente.

La longitud máxima de un varchar es

65535

dividido por la longitud máxima de bytes de un carácter en el conjunto de caracteres en el que se establece la columna (por ejemplo, utf8 = 3 bytes, ucs2 = 2, latin1 = 1).

menos 2 bytes para almacenar la longitud

menos la longitud de todas las demás columnas

menos 1 byte por cada 8 columnas que aceptan valores NULL. Si su columna es nula / no nula, esto se almacena como un bit en un byte / bytes llamado máscara nula, 1 bit por columna que es anulable.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *