Sintaxis

[NATIONAL]VARCHAR(M)[CHARACTERSET charset_name][COLLATE collation_name]

Descripción

Una longitud variable string. M representa la longitud máxima de columna en caracteres. El rango de M es de 0 a 65.532. La longitud máxima efectiva de un VARCHAR está sujeta al tamaño máximo de fila 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 usa el juego de caracteres utf8 puede declararse con un máximo de 21,844 caracteres.

MariaDB almacena valores VARCHAR como una longitud de uno o dos bytes prefix más datos. La longitud prefix indica el número de bytes en el valor. Una columna VARCHAR usa un byte de longitud si los valores no requieren más de 255 bytes, dos bytes de longitud si los valores pueden requerir más de 255 bytes.

Nota:MariaDB 5.1 y posteriores siguen la especificación SQL estándar y no eliminan los espacios finales de los valores VARCHAR.

Las columnas VARCHAR (0) pueden contener 2 valores: un vacío string o NULO. Estas columnas no pueden formar parte de un índice. El motor de almacenamiento CONNECT no admite VARCHAR (0).

VARCHAR es la abreviatura de CARACTER VARYING. NATIONAL VARCHAR es la forma estándar de SQL de definir que una columna VARCHAR debe utilizar algún juego de caracteres predefinido. MariaDB usa utf8 como este conjunto de caracteres predefinido, al igual que MySQL 4.1 y versiones posteriores. NVARCHAR es la abreviatura de NATIONAL VARCHAR.

Antes de MariaDB 10.2, todas las intercalaciones de MariaDB eran de tipo PADSPACE, lo que significa que VARCHAR (así como los valores CHAR y TEXT) se comparan sin tener en cuenta los espacios finales. Esto no se aplica al operador de coincidencia de patrones LIKE, que tiene en cuenta los espacios finales. Desde MariaDB 10.2, se encuentran disponibles una serie de intercalaciones NO PAD.

Si un índice único consiste en una columna donde los caracteres de la almohadilla final se eliminan o se ignoran, las inserciones en esa columna donde los valores difieren solo por el número de caracteres de la almohadilla final darán como resultado un duplicado:key error.

Ejemplos de

Los siguientes son equivalentes:

VARCHAR(30)CHARACTERSET utf8
NATIONALVARCHAR(30)
NVARCHAR(30)NCHARVARCHAR(30)NATIONALCHARACTERVARYING(30)NATIONALCHARVARYING(30)

Espacios finales:

CREATETABLE strtest (v VARCHAR(10));INSERTINTO strtest VALUES('Maria   ');SELECT v='Maria',v='Maria   'FROM strtest;+-----------+--------------+| v='Maria'| v='Maria   '|+-----------+--------------+|1|1|+-----------+--------------+SELECT v LIKE'Maria',v LIKE'Maria   'FROM strtest;+----------------+-------------------+| v LIKE'Maria'| v LIKE'Maria   '|+----------------+-------------------+|0|1|+----------------+-------------------+

Truncamiento

  • Dependiendo de si está configurado o no el modo sql estricto, obtendrá una advertencia o un error si intenta insertar un string eso es demasiado largo en una columna VARCHAR. Si los caracteres adicionales son espacios, los espacios que no caben se eliminarán y siempre recibirá una advertencia, independientemente de la configuración del modo SQL.

Diferencia entre VARCHAR y TEXT

  • Las columnas VARCHAR se pueden indexar por completo. Las columnas TEXT solo se pueden indexar en una longitud especificada.
  • El uso de TEXT o BLOB en una consulta SELECT que usa tablas temporales para almacenar resultados intermedios obligará a la tabla temporal a estar basada en disco (usando el motor de almacenamiento Aria en lugar del motor de almacenamiento de memoria, que es un poco más lento. Esto no es tan malo como el motor de almacenamiento Aria almacena en caché las filas en la memoria. Para obtener el beneficio de esto, uno debe asegurarse de que la variable aria_pagecache_buffer_size sea lo suficientemente grande como para contener la mayoría de los datos de filas e índices de las tablas temporales.

Modo Oracle

MariaDB comenzando con 10.3

En modo Oracle de MariaDB 10.3, VARCHAR2 es un sinónimo.

Para desarrolladores de motores de almacenamiento

  • Internamente, la longitud completa de la columna VARCHAR se asigna dentro de cada registro de objetos TABLE[] estructura. Como hay tres de estos búferes, cada tabla abierta asignará 3 veces la longitud máxima para almacenar varchar bytes de memoria.
  • Las columnas TEXT y BLOB se almacenan con un puntero (4 u 8 bytes) + una longitud de 1-4 bytes. Los datos de TEXTO solo se almacenan una vez. Esto significa que internamente TEXT usa menos memoria para cada mesa abierta, pero en su lugar tiene la sobrecarga adicional que cada TEXT el objeto debe asignarse y liberarse para cada acceso de fila (con algo de almacenamiento en caché en el medio).

Ver también

  • VARBINARIO
  • TEXTO
  • CARBONIZARSE
  • Conjuntos de caracteres y colaciones
  • Requisitos de almacenamiento del tipo de datos
  • Modo Oracle de MariaDB 10.3

El contenido reproducido en este sitio es propiedad de sus respectivos dueños, y MariaDB no revisa este contenido con anticipación. Los puntos de vista, la información y las opiniones expresadas por este contenido no representan necesariamente las de MariaDB o de cualquier otra parte.