Skip to main content

MySQL 数据类型总结

一、数值类型

1、整型

MySQL 数据类型大小范围(有符号)范围(无符号)用途
TINYINT1 个字节(-128,127)(0,255)小整数值
SMALLINT2 个字节(-32768,32767)(0,65535)大整数值
MEDIUMINT3 个字节(-8388608,8388607)(0,16777215)大整数值
INT / INTEGER4 个字节(-2147483648,2147483647)(0,4294967295)大整数值
BIGINT8 个字节(+-9.22 × 1018)(0,18446744073709551615)极大整数值

对于整数类型,一般指定 INT 即可。

2、浮点型

类型大小范围(有符号)范围(无符号)用途
FLOAT4 字节
(-3.402 823 466 E+38,
-1.175 494 351 E-38),
0,
(1.175 494 351 E-38,
3.402 823 466 351 E+38)
0,
(1.175 494 351 E-38,
3.402 823 466 E+38)
单精度
精度 7 位
DOUBLE8 字节
(-1.797 693 134 862 315 7 E+308,
-2.225 073 858 507 201 4 E-308),
0,
(2.225 073 858 507 201 4 E-308,
1.797 693 134 862 315 7 E+308)
0,
(2.225 073 858 507 201 4 E-308,
1.797 693 134 862 315 7 E+308)
双精度
精度 15 位
DECIMAL
DECIMAL(M,D) 中
如果 M>D,为 M+2,否则为 D+2
依赖于 M 和 D 的值依赖于 M 和 D 的值
小数值
精度 28 位

对精度要求小于 7 位的,直接用 FLOAT,大于 7 位的用 DOUBLE,大于 15 位的用定点数 DECIMAL 存储,例如科学、金融、货币等对精度要求高的数据。

二、字符串类型

字符串分为二进制与非二进制类型:

  • 二进制用于储存图片、声音等文件;
  • 非二进制用于储存文本数据,受字符集和校对规则影响。
类型大小用途
CHAR0-255 字节定长字符串
VARCHAR0-65535 字节变长字符串
TINYBLOB0-255 字节不超过 255 个字符的二进制字符串
TINYTEXT0-255 字节短文本字符串
BLOB0-65 535 字节二进制形式的长文本数据
TEXT0-65 535 字节长文本数据
MEDIUMBLOB0-16 777 215 字节二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215 字节中等长度文本数据
LONGBLOB0-4 294 967 295 字节二进制形式的极大文本数据
LONGTEXT0-4 294 967 295 字节极大文本数据
CHAR 和 VARCHAR 的区别

char 类型是定长类型,比如定义了 20 长度的 char 类型,只存一个字符也占用 20 个长度,char 处理速度快,但空间占用大,一般用于手机号、邮箱、密码等长度相对固定的场景。

varchar 类型与 char 相反,点用空间受内容影响,可以把文章标题、简介等设为 varchar 类型。

1、字符集

字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同。常用的字符集有 GBK、BIG5、UTF8。其中,UTF8 字符包含文字内容更广,如韩文、日文、德文兼容度更高,也是推荐使用的字符集。可通过以下命令查看服务器支持的字符集:

SHOW CHARACTER SET;

查询结果如下:

表如果不设置字符集则会继承数据库的字符集,字段同理,如果不设置则继承表的字符集。

2、校对规则

校对规则是在字符集内用于字符比较和排序的一套规则,以 _ci 结束的为大小写不敏感、_bin 结束的为不区分大小写。可通过以下命令查看系统支持的校对规则:

SHOW COLLATION;

三、日期和时间类型

类型大小范围格式用途
DATE3 字节1000-01-01 / 9999-12-31YYYY-MM-DD日期值
TIME3 字节'-838:59:59' / '838:59:59'HH:MM:SS时间值或持续时间
YEAR1 字节1901 / 2155YYYY年份值
DATETIME8 字节'1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'YYYY-MM-DD hh:mm:ss混合日期和时间值
TIMESTAMP4 字节'1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTCYYYY-MM-DD hh:mm:ss混合日期和时间值,时间戳