Mysql/MariaDB ¿Cuál es el tamaño máximo para un campo de tipo varchar?

Definir la longitud máxima de un campo varchar


Un poco de contexto. Necesitaba almacenar una longitud de caracteres previsiblmente grande con lo cual podria optar por un campo de tipo text.
Un campo de este tipo, text, es poco eficiente en busquedas así que siempre es preferible configurar uno varchar porque ofrece ciertas ventajas, aparte del rendimiento permite su indexación.
La interrogante que surge es: ¿Cuál es el valor máximo que admite la longitud de un varchar?. Esto lo he descubierto de forma empírica. El resultado es 16383 pero con una particularidad. No es la longitud máxima del campo, sino de la fila, esto es, el conjunto de campos.

Todos los campos definidos van restando espacio a los 16383 permitidos. Se ve más claro en las siguientes imágenes.

Probando longitud VARCHAR(16384)

Definiendo único campo varchar de 16384 de longitud da error
Column length too big for column 'product_name' (max = 16383); use BLOB or TEXT instead

Probando longitud VARCHAR(16383)

Definiendo único campo varchar con longitud 16383 ok
Definiendo único campo varchar con longitud 16383. Table altered sucessfully

Probando longitud VARCHAR(16383) más campo flag VARCHAR(1)

Definiendo dos campos. Uno de 16383 y otro de 1 da error
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

Probando longitud VARCHAR(16381) más campo flag VARCHAR(1)

Aquí un apunte. Cuando probé, 16382 y 1 me dió error de Maximum row size

Definiendo dos campos. Uno de 16381 y otro de 1 ok
Definiendo dos campos. Uno de 16381 y otro de 1. Table altered sucessfully

Autor: Eduardo A. F.
Publicado: 22-05-2022 13:29