MySQL 8.0中主要有三类常用数据类型,分别是数值类型(Numeric Data Types),日期和时间类型(Data and Time Data Types),字符类型(String Data Types)。

数值类型(Numeric Data Types)

整数类型 Integer Types (Exact Value)

TypeStorageMin SignedMax SignedMin UnsignedMax Unsigned
TINYINT1 Byte-1281270255
SMALLINT2 Bytes-3276832767065535
MEDIUMINT3 Bytes-83886088388607016777215
INT4 Bytes-2147483648214748364704294967295
BIGINT8 Bytes-2^632^63-102^64-1

MySQL支持一个扩展,可以在类型的基本关键字后面的括号中选择性地指定整数类型的显示宽度。例如, INT(4)表示显示宽度为四位。当数值小于指定宽度时,将会在左侧填充空格。

指定显示宽度不会限制超出指定宽度的数值的储存和显示。例如, SMALLINT(3)的储存值范围为 -32768到32767,超出指定的三位宽度的数值会正常显示。

固定小数点类型 Fixed-Point Types (Exact Value)

DECIMAL和NUMERIC类型储存准确值。一般用于保存高精度的数据,比如货币。 在Mysql中,DECIMAL是NUMERIC的实现,一般等价使用。

举例:
salary DECIMAL(5,2)

表示5位数字,其中小数有2位,可以存储在salary 列范围从-999.99到 999.99。

浮点类型 Floating-Point Types (Approximate Value)

FLOAT和DOUBLE类型表示近似数值。在MySQL中,FLOAT使用4字节,DOUBLE使用8字节。

位类型 Bit-Value Type

位类型用于储存位值。BIT(M)表示使用M位储存,M取值范围是1到64。

使用b'value'表示二进制数值,比如b'111'和b'10000000'表示7和128。

日期和时间类型 (Date and Time Data Typps)

TypeFormatSupported Range
DATEYYYY-MM-DD‘1000-01-01’ to ‘9999-12-31’
DATETIMEYYYY-MM-DD hh:mm:ss[.fsp]‘1000-01-01 00:00:00.000000’ to ‘9999-12-31 23:59:59.999999’
TIMESTAMPhh:mm:ss[.fsp]‘1970-01-01 00:00:01.000000’ UTC to ‘2038-01-19 03:14:07.999999’ UTC
TIMEhh:mm:ss[.fsp]‘-838:59:59.000000’ to ‘838:59:59.000000’
YEARYYYY1901 to 2155

fsp表示小数秒精度;即秒的小数部分位数。fsp值必须在0到6的范围内。值0表示没有小数部分。如果省略,则默认精度为 0。

字符类型 (String Data Types)

TypeRangeUsages
CHAR0-255 characters固定长度字符串
VARCHAR0 to 65,535 characters可变长度字符串
BINARY0-255 bytes固定长度二进制字符串
VARBINARY0 to 65,535 bytes可变长度二进制字符串
BLOB0 to 65,535 bytes二进制大对象,可容纳可变数量的数据
TEXT0 to 65,535 characters文本,储存和读取时保留空格空行
ENUM0 to 65,535 distinct elements指定可选的系列值

Blog表示二进制大对象,可容纳可变数量的数据。BLOG类型包括TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB等四种,区别在于容纳的最大范围不同。

TEXT表示非二进制字符串。TEXT类型包括TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT,分别和BLOG的四种类型对应,相应的最大长度和存储需求一样对应。


参考文档

https://dev.mysql.com/doc/refman/8.0/en/data-types.html
https://www.runoob.com/mysql/mysql-data-types.html