mysql - campo - varchar max length sql server
Límite de tamaño de MySQL VARCHAR (4)
Del http://dev.mysql.com/doc/refman/5.0/en/char.html :
Los valores en las columnas VARCHAR son cadenas de longitud variable. La longitud se puede especificar como un valor de 0 a 255 antes de MySQL 5.0.3 y de 0 a 65,535 en 5.0.3 y versiones posteriores. La longitud máxima efectiva de un VARCHAR en MySQL 5.0.3 y posterior está sujeta al tamaño máximo de fila (65,535 bytes, que se comparte entre todas las columnas) y al conjunto de caracteres utilizado.
Solo uso VARCHAR cuando estoy seguro de que los datos que debe contener la columna nunca superarán una cierta longitud, e incluso entonces soy cauteloso. Si estoy almacenando una cadena de texto, tiendo a usar uno de los tipos de texto.
Consulte los Requisitos de almacenamiento de MySQL para obtener más información sobre cómo se utilizan los bytes.
Si tengo una columna en la tabla con el campo de tipo VARCHAR(15)
y si intento insertar datos de longitud 16, MySQL da un error que indica
Data too long for column ''testname'' at row 1
¿Alguien sabe por qué los campos VARCHAR en MySQL toman una longitud fija? Además, ¿cuántos bytes toma un campo VARCHAR por registro en función del tamaño dado?
Pequeña nota extra local. El número de bytes utilizados dependerá del esquema de codificación en uso. 1 byte por carácter en la codificación latin1, pero hasta 3 en UTF8. Vea el enlace en la respuesta de mlambie para más detalles.
Si configura una columna para que sea varchar(15)
el máximo de bytes permitidos es 15. Por lo tanto, no puede pasar más de 15 caracteres sin modificar la columna para admitir más de 15. Si almacena una cadena de 4 caracteres, solo debe usar alrededor de 4 bytes de 15 posibles, mientras que si usara char(15)
, habría completado los otros 11 con bytes vacíos.
http://dev.mysql.com/doc/refman/5.0/en/char.html
(El cálculo de mi byte probablemente estaba apagado ya que siempre es -1 / + 1 o algo así).
Si mira aquí debería decirle todo sobre varchar que quiera saber: http://dev.mysql.com/doc/refman/5.0/en/char.html
Básicamente, dependiendo de la longitud que elija, utilizará 1 o dos bytes para rastrear la longitud de la cadena actual en esa columna, por lo que almacenará la cantidad de bytes para los datos que ingresa, más uno o dos bytes.
Entonces, si pones ''abc'', serán 4 o 5 bytes utilizados para esa columna en esa fila.
Si usó char(15)
, incluso ''abc'' tomaría 15 bytes, ya que los datos están rellenados por la derecha para usar los 15 bytes completos.