MySQL veld-types
char-varchar
altijd even veel tekens: CHAR (code’s enz)
niet altijd volledig gevuld: VARCHAR (trager maar neemt niet zoeveel verloren plaats in)
Gebruik OPTIMIZE TABLE om de varchars te defragmenteren.
text/BLOB
Gebruik op deze tabel geen SELECT * FROM, maar benoem de velden.
Signed – Unsigned
negatieve getallen in gebruik: SIGNED. Bereik wordt verdeeld over – 0 +
geen negatieve: UNSIGNED. Bereik wordt volledig gebruikt langs positieve kant: 0 +
primary key
- auto-increment, start van 0? Gebruik UNSIGNED (dubbel zoveel waarden mogelijk)
- hoeveel records heb je nodig?
- Miljoenen, miljarden of enkele, tot enkele tientallen, soms zonder user interface zodat het nooit automatisch ingevuld zal worden? Gebruik zo klein mogelijk datatype.
- 0-255: UNSIGNED TINYINT
- 0-65.000 UNSIGNED SMALLINT
- 0-16.000.000: UNSIGNED MEDIUMINT
- >4 miljard: UNSIGNED INT
Overzicht:
Type | Bytes | Minimum Value | Maximum Value |
(Signed/Unsigned) | (Signed/Unsigned) | ||
TINYINT |
-128 |
127 |
|
0 |
255 |
||
SMALLINT |
-32.768 |
32.767 |
|
0 |
65.535 |
||
MEDIUMINT |
-8.388.608 |
8.388.607 |
|
0 |
16.777.215 |
||
INT |
-2.147.483.648 |
2.147.483.647 |
|
0 |
4.294.967.295 |
||
BIGINT |
-9.223.372.036.854.775.808 |
9.223.372.036.854.775.807 |
|
0 |
18.446.744.073.709.551.615 |
Erover!
Als je een groter getal in de tabel probeert te steken, dan wat het kolom-formaat toelaat, dan wordt de grootste waarde die kan worden opgeslagen in de tabel bewaard, zonder foutmelding!
(nog in bewerking)
INSERT INTO `numberlimits` ( `tinyint_s` , `tinyint_u` )
VALUES (‘127’, ‘255’);
INSERT INTO `numberlimits` ( `tinyint_s` , `tinyint_u` )
VALUES (‘128’, ‘256’);
SELECT * FROM `numberlimits`
mysql> select * from numberlimits;
+-----------+-----------+ | tinyint_s | tinyint_u | +-----------+-----------+ | 127 | 255 | | 127 | 255 | +-----------+-----------+