2010-10-29 34 views
20

Siempre pensé que el número entre paréntesis representaba la longitud del campo? Sin embargo, entiendo que no siempre es el caso. Tal vez es un problema de MySQL? Alguien me dijo que si configuro un campo de 9 caracteres, puedo agregar un valor de más de 9 caracteres, pero solo se guardarán los primeros 9.¿Qué significa realmente el número entre paréntesis?

Ejemplo ...

create table "person" (id INT, age INT(2)); 

Si ese es el caso, ¿no debería seleccionar algo así como TINYINT en lugar de INT para la edad?

Respuesta

35

INT(2) generará un INT con el minimum display width of 2:

MySQL soporta una extensión para especificar opcionalmente el ancho de la pantalla de tipos de datos enteros en paréntesis a continuación de la palabra clave de base para el tipo. Por ejemplo, INT (4) especifica una INT con un ancho de visualización de cuatro dígitos. Las aplicaciones pueden usar este ancho de visualización opcional para mostrar los valores enteros que tienen un ancho menor que el ancho especificado para la columna al rellenarlos con espacios. (Es decir, este ancho está presente en los metadatos devueltos con los conjuntos de resultados. Si se usa o no depende de la aplicación.)

El ancho de visualización no limita el rango de valores que se pueden almacenar en la columna . Tampoco impide que los valores más amplios que el ancho de la visualización de la columna se muestren correctamente. Por ejemplo, una columna especificada como SMALLINT (3) tiene el rango SMALLINT habitual de -32768 a 32767, y los valores fuera del rango permitido por tres dígitos se muestran en su totalidad con más de tres dígitos.

esto hace no afectan a la gama de valores posibles, que pueden almacenarse en el campo; tampoco es la cantidad de bytes utilizados para almacenarlo. Parece ser solo una recomendación para las aplicaciones sobre cómo mostrar el valor, a menos que se use ZEROFILL (consulte la página vinculada).

Un TINYINT sin signo (0 ... 255) probablemente también lo haría, a menos que cryopreservation dé un gran paso adelante durante la vida útil de su aplicación.

+0

Y continúa: "El ancho de visualización no limita el rango de valores que se pueden almacenar en la columna. Tampoco impide que los valores más amplios que el ancho de la visualización de la columna se muestren correctamente". –

+1

así que ¿por qué molestarse en implicar que el campo puede tomar un valor de hasta 2? No creo que tenga nada que ver con la duración del valor de mysql interno, ¿correcto? Es solo una cosa de exhibición. – luckytaxi

+0

@Anders, ¿es eso un problema de mysql o se aplica a postgres, oráculo y otros? – luckytaxi

-3

Este es el caso de los tipos de campo como vchar, pero para los números representa la cantidad de bytes que utiliza para representar el número. Un número entero de dos bytes significa que puede contener un número 2^16 - 1 (8 bits en un byte, por lo que 16 en total). Si es la edad, creo que deberías estar a salvo con dos bytes. ;)

+3

Solía ​​pensar que '(2)' significaba bytes también, pero es incorrecto. –

+0

ah ok, entonces es más para vchar. Entonces, si quisiera mostrar SSN, no debería haber hecho 'ssn INT (9)' – luckytaxi

+0

Aparentemente estaba equivocado. Escucha a Pekka. o.O – Neil

Cuestiones relacionadas