2009-10-20 33 views
16

Si tengo una columna en la tabla con el campo de tipo VARCHAR(15) y si trato de insertar datos de longitud 16, MySQL da un error que indicalímite de tamaño de MySQL VARCHAR

Data too long for column 'testname' at row 1 

¿Alguien sabe por qué campos VARCHAR en MySQL tomar longitud fija? ¿También cuántos bytes toma un campo VARCHAR por registro según el tamaño dado?

+4

@Camilo - ¡Falsifíquelo hasta que lo logre! – Ben

Respuesta

13

Si configura una columna como varchar(15), el máximo de bytes permitido 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 debería utilice alrededor de 4 bytes de un posible 15, mientras que si usó char(15) habría completado los otros 11 con bytes vacíos.

http://dev.mysql.com/doc/refman/5.0/en/char.html

(Mi cálculo byte fue probablemente fuera ya que es siempre -1/+ 1 o algo por el estilo).

+0

Gracias. Bueno, en mi caso, no estoy muy seguro de cuál será la longitud de los datos entrantes. Podría ser demasiado largo o demasiado pequeño. para ser más precisos: Si he especificado una columna como Varchar (100), los datos pueden ser de 100 caracteres o pueden ser de 50 caracteres. Solo para aclarar mi entendimiento. ¿Quiere decir que solo actuará como tipo de datos CHAR? Quiero decir que tomará 100 bytes completos para cada registro o solo 50 bytes insertados.También en otros RDBMS Si no he especificado el límite varchar o incluso después de especificar en el límite, me permite insertar más caracteres que eso. ¿Es posible en MYSQL? –

+0

Si lo configura en 'varchar (100)' y los datos de su fila son 50 caracteres, solo usará la mitad de eso, * no * actúa como 'char', lo que llena los bytes restantes. –

+0

Gracias pero no es posible insertar más de 100 bytes en la columna varchar (100). Perdón por hacer la misma pregunta una y otra vez. Pero quiero estar muy seguro antes de configurar cualquier tamaño a la columna. Gracias de nuevo. –

1

Si nos fijamos Aquí hay que contar todo sobre varchar desea saber: http://dev.mysql.com/doc/refman/5.0/en/char.html

Básicamente, dependiendo de la longitud que eligieron usará 1 o dos bytes para realizar un seguimiento de 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.

Por lo tanto, si coloca 'abc', entonces serán 4 o 5 bytes utilizados para esa columna en esa fila.

Si usaste char(15), incluso 'abc' ocuparía 15 bytes, ya que los datos son los adecuados para usar hasta los 15 bytes completos.

+0

Hola James, ¿Qué quieres decir con datos rellenos? También quiere decir que incluso si ingresé 10 caracteres en una columna varchar (15), tomará 15 bytes completos para 10 caracteres, como el Char (15). –

+0

No, el relleno correcto es para char, no varchar. –

13

Desde el MySQL 5.0 Manual:

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 juego de caracteres utilizado.

Yo sólo uso VARCHAR cuando estoy seguro que los datos de la columna necesita para mantener nunca sobrepasar una determinada longitud, e incluso entonces yo soy cauteloso. Si estoy almacenando una cadena de texto, tiendo a usar uno de los tipos de TEXTO.

Consulte MySQL Storage Requirements para obtener más información sobre cómo se utilizan los bytes.

3

Pequeña nota local adicional. La cantidad de bytes utilizados dependerá del esquema de codificación en uso. 1 byte por carácter en codificación latin1, pero hasta 3 en UTF8. Ver el enlace en la respuesta de mlambie para más detalles.

+0

Gracias. sí. Usaré UTF-8, así que tomará doble byte. –