数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型
整型
整型的存储范围分有符号位和无符号位两种,一般无符号位是有符号位的两倍
选择数据类型要根据实际数据的大小,选择合适的数据类型有利于数据的优化
数据类型 | 字节 | 存储范围 |
---|---|---|
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