数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型
整型
整型的存储范围分有符号位和无符号位两种,一般无符号位是有符号位的两倍
选择数据类型要根据实际数据的大小,选择合适的数据类型有利于数据的优化
| 数据类型 | 字节 | 存储范围 | 
|---|---|---|
| tinyint | 1 | -128~127 无符号0~255 | 
| smallint | 2 | -32768~32767 无符号0~65535 | 
| mediumint | 3 | -2^23~2^23-1(800万) 无符号0~2^24-1 | 
| int | 4 | -2^31~2^31-1(21亿) 无符号0~2^32-1 | 
| bigint | 8 | -2^63~2^63-1 无符号0~2^64-1 | 
浮点型
| 数据类型 | 存储类型 | 
|---|---|
| float[(m,d]) | -3.402E+38到-1.175E-38 0和1.175E-38到3.402+38 m是数字总位数,d是小数点后面的位数,如果m和d被省略,会根据硬件允许的限制来保存值 | 
| double[(m,d)] | -1.797E+308到-2.223E-308、0和2.225E-308到1.797E+308 | 
float,单精度浮点,保留小数点后7位,C语言默认显示6位小数。
double,双精度浮点,一般是float存储范围的十倍,C语言默认显示15位小数。
日期时间型
| 数据类型 | 存储范围 | 存储需求 | 
|---|---|---|
| YEAR | 1970至2069 | 1 | 
| TIME | -838:59:59至838:59:59 | 3 | 
| DATE | 1000-1-1至9999-12-31 | 3 | 
| DATETIME | 1000-1-1 00:00:00至9999-12-31 23:59:59 | 8 | 
| TIMESTAMP | 1970-1-1 00:00:00到2037-12-31 23:59:59 | 4 | 
字符型
| 列类型 | 存储需求 | 
|---|---|
| CHAR(M) | M个字节 0<=M<=255 定长 M是5就5个字节 abc会在后面补两个空格 | 
| VARCHAR(M) | L+1个字节 L<=M,0<=M<=65535 变长 abc就是abc | 
| TINYTEXT | L+1个字节,L<2的8次方 | 
| TEXT | L+2个字节,L<2的16次方(6w5),标准文本 | 
| MEDIUMTEXT | L+3个字节,L<2的24次方(1600w) | 
| LONGTEXT | L+4个字节,L<2的32次方 | 
| ENUM(‘value1’;’value2’,…) | 1or2字节 取决于枚举值的个数(最多65535个值) | 
| SET(’value1’,’value2’,…) | 1、2、3、4、8字节,取决于set成员个数(最多64个成员) | 
boolean
MySQL没有内置的布尔类型,但是它使用TINYINT(1)。 为了更方便,MySQL提供BOOLEAN或BOOL作为TINYINT(1)的同义词。
MySQL将布尔值作为整数存储在表中,但当显示表定义时,它是却是TINYINT(1)类型12345CREATE TABLE tasks (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255) NOT NULL,completed BOOLEAN);
https://www.yiibai.com/mysql/boolean.html
https://dev.mysql.com/doc/refman/8.0/en/bit-type.html