2009-10-27 16 views
39

Tengo algunos números que ahora son más grandes que INT puede manejar.¿BIGINT (8) es el número entero más grande que mysql puede almacenar?

Esto es un poco embarazoso, pero sinceramente no sé exactamente qué significa BIGINT (8). ¿El 8 en ese es el valor de bit máximo o la longitud máxima?

¿Entonces BIGINT (1) solo puede tener un dígito? ¿O es BIGINT (1) algo más? Creo que tinyint (1) max es 127, ¿cómo funciona?

¿Cuál es el mayor que puedo hacer BIGINT? ¿Cuál es el número más grande que puedo almacenar en mysql como un número entero?

+0

5 respuestas en el mismo minuto, con casi las mismas conclusiones :) – Abel

+1

Ya, subí a todos porque solo puedo elegir una respuesta :) – Citizen

Respuesta

35

El número representa cómo se muestra, no afecta cómo se almacenan los datos.

De the manual:

Otra extensión está soportado por MySQL 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)). 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 , ni la cantidad de dígitos que se muestran para valores que tienen un ancho que excede el especificado para la columna. 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 caracteres se muestran con más de tres caracteres.

BIGINT es siempre de 8 bytes y puede almacenar -9223372036854775808-9223372036854775807 (firmado) o de 0 a 18446744073709551615 (sin firmar).

10

Responde en this overview. A BIGINT es de hecho 8 bytes. A TinyInt solo 1.

Por cierto, no considero el rango de -9223372036854775808 a 9223372036854775807 muy embarazoso, es +/- 2^63 :).

4

El número entre paréntesis es el 'ancho de visualización' y no está relacionado con el rango de números que el tipo de datos puede almacenar.

Una gama de BIGINT es -9223372036854775808 a 9223372036854775807. El rango sin signo es 0 a 18446744073709551615.

Puede encontrar más información aquí: http://dev.mysql.com/doc/refman/5.4/en/numeric-type-overview.html

2

Para almacenar un número entero de 128 bits, puede utilizar un binario (dieciséis).

Para 252:

DERECHO SELECT (CONCAT (REPEAT ("\ 0", 16), UNHEX (CONV (252,10,16))), 16);

o equivalentemente:

SELECT UNHEX (RIGHT (CONCAT (REPEAT ("0", 32), HEX (252)), 32));

(pero los cálculos de enteros de MySQL son de 64 bits)

Ver también la reciente funciones IPv6 INET6_ATON() y INET6_NTOA(), http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html#function_inet6-aton y cómo utilizan un VARBINARY (16).

Cuestiones relacionadas