MySQL数据类型

数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型

整型

整型的存储范围分有符号位和无符号位两种,一般无符号位是有符号位的两倍

选择数据类型要根据实际数据的大小,选择合适的数据类型有利于数据的优化

数据类型 字节 存储范围
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)类型

1
2
3
4
5
CREATE 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