Qual è la dimensione della colonna di int(11)
in mysql in byte?
E il valore massimo che può essere memorizzato in questa colonna?
mysql
prima del mio arrivo. Grazie
Qual è la dimensione della colonna di int(11)
in mysql in byte?
E il valore massimo che può essere memorizzato in questa colonna?
mysql
prima del mio arrivo. Grazie
Risposte:
Un INT
sarà sempre di 4 byte, indipendentemente dalla lunghezza specificata.
TINYINT
= 1 byte (8 bit)SMALLINT
= 2 byte (16 bit)MEDIUMINT
= 3 byte (24 bit)INT
= 4 byte (32 bit)BIGINT
= 8 byte (64 bit).La lunghezza specifica solo quanti caratteri riempire quando si selezionano i dati con il client della riga di comando mysql. 12345 memorizzato come int(3)
verrà comunque visualizzato come 12345, ma se fosse memorizzato come int(10)
sarebbe ancora visualizzato come 12345, ma si avrebbe la possibilità di riempire le prime cinque cifre. Ad esempio, se aggiunto ZEROFILL
, verrà visualizzato come 0000012345.
... e il valore massimo sarà 2147483647 (Firmato) o 4294967295 (Non firmato)
5001
verrà visualizzato come 5001
anche se il campo è definito come INT(3)
. Vedi la risposta di @priyabagus qui sotto e qui .
INT ( x ) farà la differenza solo in termini di visualizzazione , cioè per mostrare il numero in x cifre, e non limitato a 11. Lo ZEROFILL
abbini usando , il che anteporrà gli zeri fino a quando non corrispondono alla tua lunghezza.
Quindi, per qualsiasi numero di x inINT(x)
se il valore memorizzato ha meno cifre di x , ZEROFILL
anteporrà gli zeri.
INT (5) ZEROFILL con il valore memorizzato di 32 mostrerà 00032
INT (5) con il valore memorizzato di 32 mostrerà 32
INT con il valore memorizzato di 32 mostrerà 32
se il valore memorizzato ha più cifre di x , verrà mostrato così com'è.
INT (3) ZEROFILL con il valore memorizzato di 250000 mostrerà 250000
INT (3) con il valore memorizzato di 250000 mostrerà 250000
INT con il valore memorizzato di 250000 mostrerà 250000
Il valore effettivo memorizzato nel database non è interessato, la dimensione è sempre la stessa e qualsiasi calcolo si comporterà normalmente.
Questo vale anche per BIGINT, MEDIUMINT, SMALLINT e TINYINT.
ZEROFILL
.
Secondo qui , int(11)
richiederà 4 byte di spazio, ovvero 32 bit di spazio con 2^(31) = 2147483648
valore massimo e -2147483648
valore minimo. Un bit è per il segno.
Come altri hanno già detto, i valori minimi / massimi che la colonna può memorizzare e la quantità di memoria necessaria in byte è definita solo dal tipo, non dalla lunghezza.
Molte di queste risposte affermano che la (11)
parte influisce solo sulla larghezza del display, il che non è esattamente vero, ma soprattutto.
Una definizione di int(2)
con nessun ZEROFILL specificato dovrà:
100
100
quando output (no 0
o 00
)L'unica cosa (2)
che farà è se viene specificato anche zerofill :
1
verrà mostrato un valore di 01
.Il modo migliore per vedere tutte le sfumature è eseguire:
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`int1` int(10) NOT NULL,
`int2` int(3) NOT NULL,
`zf1` int(10) ZEROFILL NOT NULL,
`zf2` int(3) ZEROFILL NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mytable`
(`int1`, `int2`, `zf1`, `zf2`)
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);
select * from mytable;
che produrrà:
+----+-------+-------+------------+-------+
| id | int1 | int2 | zf1 | zf2 |
+----+-------+-------+------------+-------+
| 1 | 10000 | 10000 | 0000010000 | 10000 |
| 2 | 100 | 100 | 0000000100 | 100 |
+----+-------+-------+------------+-------+
Questa risposta è testata contro MySQL 5.7.12 per Linux e può variare o meno per altre implementazioni.
Qual è la dimensione della colonna di int (11) in mysql in byte?
(11)
- questo attributo del int
tipo di dati non ha nulla a che fare con la dimensione della colonna. È solo la larghezza di visualizzazione del tipo di dati intero. Da 11.1.4.5. Attributi di tipo numerico :
MySQL supporta un'estensione per specificare facoltativamente la larghezza di visualizzazione dei tipi di dati interi tra parentesi seguendo la parola chiave di base per il tipo. Ad esempio, INT (4) specifica un INT con una larghezza di visualizzazione di quattro cifre.
Una buona spiegazione per questo può essere trovata qui
Per riassumere: Il numero N in int (N) è spesso confuso dalla dimensione massima consentita per la colonna, come nel caso di varchar (N).
Ma questo non è il caso dei tipi di dati Integer: il numero N tra parentesi non è la dimensione massima per la colonna, ma semplicemente un parametro per indicare a MySQL quale larghezza visualizzare la colonna quando i dati della tabella vengono visualizzati tramite MySQL console (quando si utilizza l'attributo ZEROFILL).
Il numero tra parentesi indica a MySQL con quanti zeri è necessario riempire gli interi in entrata. Ad esempio: se si utilizza ZEROFILL su una colonna impostata su INT (5) e viene inserito il numero 78, MySQL riempie quel valore con zeri fino a quando il numero non soddisfa il numero tra parentesi. vale a dire 78 diventerà 00078 e 127 diventerà 00127. Per riassumere: il numero tra parentesi viene utilizzato a scopo di visualizzazione.
In un certo senso, il numero tra parentesi è un po 'inutile a meno che non si stia utilizzando l'attributo ZEROFILL.
Quindi la dimensione per int rimarrebbe la stessa, cioè da -2147483648 a 2147483648 per firmata e da 0 a 4294967295 per non firmata(~ 2,15 miliardi e 4,2 miliardi, che è uno dei motivi per cui gli sviluppatori rimangono inconsapevoli della storia dietro il numero N tra parentesi, poiché non influenza quasi nulla sul database a meno che non contenga più di 2 miliardi di righe) e in termini di byte sarebbe 4 byte .
Per ulteriori informazioni sulla dimensione / intervallo dei tipi di numeri interi, consultare il Manuale MySQL
Sebbene sia improbabile che questa risposta sia visibile, penso che valga la pena di chiarire quanto segue:
A BIT OF DETAIL,
la larghezza del display è, apparentemente, destinata a fornire alcuni metadati su quanti zeri visualizzare in un numero pieno di zero.
In realtà NON limita la lunghezza di un numero restituito da una query se quel numero supera la larghezza di visualizzazione specificata.
Per sapere quale lunghezza / larghezza è effettivamente consentita per un tipo di dati intero in MySQL consultare l'elenco e il collegamento: ( tipi: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
Detto questo, puoi aspettarti che la larghezza di visualizzazione non abbia alcun effetto sui risultati di una query standard, a meno che le colonne non siano specificate come colonne ZEROFILL
O
nel caso in cui i dati vengano estratti in un'applicazione e quell'applicazione raccolga larghezza di visualizzazione da utilizzare per qualche altro tipo di imbottitura.
Riferimento primario: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean
n
, quindi ... sì, questo è bullcrap. Fa solo qualsiasi cosa con zerofill.
In numero intero MySQL int(11)
ha una dimensione di 4 byte che equivale a 32 bit.
Il valore firmato è: - 2^(32-1) to 0 to 2^(32-1)-1
= -2147483648 to 0 to 2147483647
I valori senza segno sono: 0 to 2^32-1
= 0 to 4294967295
secondo questo libro :
MySQL ti consente di specificare una "larghezza" per i tipi interi, come INT (11). Questo non ha senso per la maggior parte delle applicazioni: non limita l'intervallo legale di valori, ma specifica semplicemente il numero di caratteri che gli strumenti interattivi di MySQL riserveranno ai fini della visualizzazione. Per scopi di archiviazione e calcolo, INT (1) è identico a INT (20).