¿Cuál es el equivalente de varchar (max) en MySQL?
¿Cuál es el equivalente de varchar (max) en MySQL?
Respuestas:
La longitud máxima de un varchar está sujeta al tamaño máximo de fila en MySQL, que es 64 KB (sin contar 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 un byte o dos para codificar la longitud de una cadena dada. Por lo tanto, en realidad no puede declarar un varchar del tamaño máximo de fila, incluso si es la única columna en 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 las longitudes, encontramos la mayor longitud que funciona:
mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)
Ahora, si tratamos de usar un juego de caracteres multibyte a nivel de tabla, encontramos que cuenta cada carácter como múltiples bytes. Las cadenas UTF8 no necesariamente usan múltiples 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, lo que no habría funcionado de todos modos. Mientras que 21844 * 3 = 65532, que funciona.
mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)
DEFAULT
valor para la columna. No se puede hacer eso con los tipos TEXT o BLOB.
TEXT
límite de longitud es de 64K. MEDIUMTEXT
El límite de longitud es de 16M. LONGTEXT
El límite de longitud es 4G.
varchar(max)
tipo de columna del servidor SQL .
TLDR; MySql no tiene un concepto equivalente de varchar(max)
, esta es una característica de MS SQL Server.
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 almacenaron sus datos como una colección de páginas de 8K separadas de las páginas de datos de la tabla; admitieron almacenar hasta 2 GB por fila.
La gran advertencia para estos tipos de columnas fue que por lo general requieren funciones y declaraciones especiales para acceder y modificar los datos (por ejemplo READTEXT
, WRITETEXT
y UPDATETEXT
)
En SQL Server 2005, varchar(max)
se introdujo para unificar los datos y consultas utilizados para recuperar y modificar datos en columnas grandes. Los datos de las varchar(max)
columnas se almacenan en línea con las páginas de datos de la tabla.
A medida que los datos en 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 ella formando una lista vinculada. A diferencia de TEXT
, NTEXT
y BLOB
el varchar(max)
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)
.
Para obtener la misma cantidad de almacenamiento que varchar(max)
en MySql, aún necesitaría recurrir a un BLOB
tipo de columna. Este artículo analiza un método muy efectivo para almacenar grandes cantidades de datos en MySql de manera eficiente.
varchar(max)
realmente significa.
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 otras columnas
menos 1 byte por cada 8 columnas que son anulables. 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.
alter table prg_ar_report_colors add Text_Color_Code VARCHAR (max);
alter table prg_ar_report_colors add Text_Color_Code longtext;
alter table prg_ar_report_colors agregar Text_Color_Code CLOB;
Mysql ¡Convertir columna de VARCHAR a TEXTO cuando está por debajo del tamaño límite!
mysql> CREATE TABLE varchars1(ch3 varchar(6),ch1 varchar(3),ch varchar(4000000))
;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------+
| Note | 1246 | Converting column 'ch' from VARCHAR to TEXT |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)
mysql>