Datatypen (MySQL)
Boolean
Datatypen bool, boolean en tinyint(1) zijn synoniem. Ik gebruik tinyint(1) voor Boolse waardes, met 0 voor niet waar en 1 voor waar. Dit zijn getallen (integers). Geen symbolische waardes of tekstwaardes.
A value of zero is considered false. Nonzero values are considered true: mysql> SELECT IF(0, 'true', 'false'); +------------------------+ | IF(0, 'true', 'false') | +------------------------+ | false | +------------------------+ mysql> SELECT IF(1, 'true', 'false'); +------------------------+ | IF(1, 'true', 'false') | +------------------------+ | true | +------------------------+ mysql> SELECT IF(2, 'true', 'false'); +------------------------+ | IF(2, 'true', 'false') | +------------------------+ | true | +------------------------+ However, the values TRUE and FALSE are merely aliases for 1 and 0, respectively, as shown here: mysql> SELECT IF(0 = FALSE, 'true', 'false'); +--------------------------------+ | IF(0 = FALSE, 'true', 'false') | +--------------------------------+ | true | +--------------------------------+ mysql> SELECT IF(1 = TRUE, 'true', 'false'); +-------------------------------+ | IF(1 = TRUE, 'true', 'false') | +-------------------------------+ | true | +-------------------------------+ mysql> SELECT IF(2 = TRUE, 'true', 'false'); +-------------------------------+ | IF(2 = TRUE, 'true', 'false') | +-------------------------------+ | false | +-------------------------------+ mysql> SELECT IF(2 = FALSE, 'true', 'false'); +--------------------------------+ | IF(2 = FALSE, 'true', 'false') | +--------------------------------+ | false | +--------------------------------+ The last two statements display the results shown because 2 is equal to neither 1 nor 0.
Datums
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-types.html
Integere datatypes
Kind Storage Signed Unsigned ----------- ------- ------------------------------------------------------- -------------------------------- * tinyint 1 byte -128 to +127 0 to 255 * smallint 2 bytes -32,768 to +32,767 0 to 65,535 * mediumint 3 bytes -8,388,608 to 8,388,607 0 to 16,777,215 * int/integer 4 bytes -2,147,483,648 to +2,147,483,647 0 to 4,294,967,295 * bigint 8 bytes -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 0 to 18,446,744,073,709,551,615
Vaak (altijd?) kun je een waarde tussen haakjes meegeven, bv.
tinyint(4)
Dit verandert niets aan het datatype, maar alleen iets aan de weergave. Je kunt dus nog steeds geen waarde van 1234 toevoegen aan een tinyint(4), want het maximum is nog steeds 255 of 128.
Fixed-point datatypes
Fixed-point datatypes zijn voor exacte rationele getallen. Er wordt dus niet ergens afgerond ofzo
- Keywords: DECIMAL & NUMERIC
- Voor geldbedragen en gewichten gebruikte ik decimal (10,4) - 6 cijfers vóór de komma, 4 cijfers achter de komma, maar ik ben overgestapt op decimal (8,2) - Geen gedoe met extra cijfers achter de komma
Floating point-datatypes
longtext, mediumtext, tinytext, text
Veldlengtes [1]:
Type | Maximum length -----------+------------------------------------- TINYTEXT | 255 (2 8−1) bytes TEXT | 65,535 (216−1) bytes = 64 KiB MEDIUMTEXT | 16,777,215 (224−1) bytes = 16 MiB LONGTEXT | 4,294,967,295 (232−1) bytes = 4 GiB
Deze lengtes zijn gedefineerd in bytes en niet in het aantal karakters. Het aantal karakters waarmee dit overeenkomt, hangt af van de gekozen tekencodering.
mediumtext
- MySQL gebruikt mediumtext regelmatig bij impliciete velddefinnities voor diverse vrij lange teksten die ik gebruik voor exportbestanden
- Merk op dat mediumtext langer is dan text!
text
Max. 65.536 tekens. Voorbeeld:
ALTER TABLE `dwh`.`root` ADD COLUMN `note` text(65530) NULL AFTER `country_of_origin`;
Percentages
http://stackoverflow.com/questions/10656948/how-to-store-a-percentage-value
Tinyint
[-128:128] of [0:255]
Voorbeelden:
- Gewicht koolborstels in grammen (afgerond op hele grammen)
- Boolean:
tinyint(1)
Let op: Je kunt een waarde tussen haakjes meegeven, bv.
tinyint(4)
Dit verandert niets aan het datatype, maar alleen iets aan de weergave. Je kunt dus nog steeds geen waarde van 1234 toevoegen aan een tinyint(4), want het maximum is nog steeds 255 of 128.
Tinytext vs. varchar
Zie dit ingewikkelde verhaal. Ik houd het op varchar
Valuta
Bv.
decimal (5,2) # 5 posities - 3 voor de komma, 2 achter - Tot 999,99 decimal (10,2) # 10 posities - 8 voor de komma, 2 achter - Tot 99.999.999,99 decimal (10,4) # 10 posities - 6 voor de komma, 4 achter - Tot 999.999,9999
Bronnen
dev.mysql.com
- https://dev.mysql.com/doc/refman/5.0/en/data-types.html
- https://dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html
- https://dev.mysql.com/doc/refman/5.0/en/floating-point-types.html
- https://dev.mysql.com/doc/refman/5.1/en/integer-types.html
- http://stackoverflow.com/questions/7755629/varchar255-vs-tinytext-tinyblob-and-varchar65535-vs-blob-text
- http://stackoverflow.com/questions/8045327/is-there-a-difference-in-using-int1-vs-tinyint1-in-mysql
Tekst-formaten
Valuta
- http://stackoverflow.com/questions/13030368/best-data-type-to-store-money-values-in-mysql
- https://dev.mysql.com/doc/refman/5.7/en/fixed-point-types.html
Overig