MySQL - 3 - 支持的数据类型

本文详细介绍了MySQL支持的各种数据类型,包括数值类型、日期时间类型和字符串类型等,并提供了实例说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL支持的数据类型


参考资料

《深入浅出MySQL全文》


仅做学习记录,不深究。


数值类型

MySQL支持所有标准SQL中的数值类型,其中包括严格数值类型近似数值数据类型


严格数值类型:integer、smallint、decimal、numeric

近似数值数据类型:float、real、double precision


MySQL 中的数值类型

整数类型

字节

最小值

最大值

TINYINT

1

有符号-128

无符号 0

有符号 127

无符号 255

SMALLINT

2

有符号-32768

无符号 0

有符号 32767

无符号 65535

MEDIUMINT

3

有符号-8388608

无符号 0

有符号8388607

无符号1677215

INT、INTEGER

4

有符号-2147483648

无符号 0

有符号 2147483647

无符号 4294967295

BIGINT

8

有符号-9223372036854775808

无符号 0

有符号 9223372036854775807

无符号 18446744073709551615

浮点数类型

字节

最小值

最大值

FLOAT

4

±1.175494351E-38

±3.402823466E+38

DOUBLE

8

±2.2250738585072014E-308

±1.7976931348623157E+308

定点数类型

字节

描述

 

DEC(M,D),

DECIMAL(M,D)

M+2

最大取值范围与 DOUBLE 相同,

给定 DECIMAL 的有效取值范围由 M 和 D决定

 

位类型

字节

最小值

最大值

BIT(M)

1~8

BIT(1)

BIT(64)

紫色标出来的,是常用的数值类型。



日期时间类型

MySQL中有很多中数据类型可以用于日期和时间的表示,不同版本可能有所差异。


MySQL 中的日期和时间类型

日期和时间类型

字节

最小值

最大值

DATE

4

1000-01-01

9999-12-31

DATETIME

8

1000-01-01 00:00:00

9999-12-31 23:59:59

TIMESTAMP

4

19700101080001

2038 年的某个时刻

TIME

3

-838:59:59

838:59:59

YEAR

1

1901

2155


这些数据类型的主要区别如下:

• 如果要用来表示年月日,通常用 DATE 来表示。

• 如果要用来表示年月日时分秒,通常用 DATETIME 表示。

• 如果只用来表示时分秒,通常用 TIME 来表示。

• 如果需要经常插入或者更新日期为当前系统时间,则通常使用 TIMESTAMP 来表示。TIMESTAMP 值返回后显示为“YYYY-MM-DD HH:MM:SS”格式的字符串,显示宽度固定为 19 个字符。如果想要获得数字值,应在 TIMESTAMP 列添加+0。

• 如果只是表示年份,可以用 YEAR 来表示,它比 DATE 占用更少的空间。YEAR 有 2 位或4 位格式的年。默认是 4 位格式。在 4 位格式中,允许的值是 1901~2155 和 0000。在2 位格式中, 允许的值是 70~69, 表示从 1970~2069 年。 MySQL 以 YYYY 格式显示 YEAR值。 


从上面可以看出,每种日期时间类型都有一个有效值范围,如果超出这个范围,在默认的 SQLMode下,系统会进行错误提示,并将以零值来进行存储。不同日期类型零值的表示如下面所示

MySQL 中日期和时间类型的零值表示

数据类型

零值表示

DATETIME

0000-00-00 00:00:00

DATE

0000-00-00

TIMESTAMP

00000000000000

TIME

00:00:00

YEAR

0000


可以用now()函数插入当前日期

mysql> insert emp values ('cyx',now(),6000,5);
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> select * from emp;
+--------+------------+---------+--------+
| ename  | hiredate   | sal     | deptno |
+--------+------------+---------+--------+
| zzx    | 2000-01-01 | 2000.00 |      1 |
| lisa   | 2003-02-01 | 3000.00 |      2 |
| bjguan | 2004-04-02 | 5000.00 |      1 |
| bzshen | 2005-04-01 | 4000.00 |      3 |
| dony   | 2005-02-05 | 2000.00 |      4 |
| cyx    | 2017-11-28 | 6000.00 |      5 |
+--------+------------+---------+--------+
6 rows in set (0.02 sec)


Date、Time、DATETIME是最常用的日期类型,我们看看下面的例子:

mysql> create table t(
    -> d date,
    -> t time,
    -> dt datetime);
Query OK, 0 rows affected (0.01 sec)

mysql> desc t;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| d     | date     | YES  |     | NULL    |       |
| t     | time     | YES  |     | NULL    |       |
| dt    | datetime | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> insert into t values(now(),now(),now());
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from t;
+------------+----------+---------------------+
| d          | t        | dt                  |
+------------+----------+---------------------+
| 2018-01-05 | 03:40:29 | 2018-01-05 03:40:29 |
+------------+----------+---------------------+
1 row in set (0.00 sec)
看结果,显而易见,DATETIME是DATE和TIME的组合。



字符串类型

MySQL中提供了多种对字符串数据的存储类型,不同版本可能有所差异。


MySQL 中的字符类型

字符串类型

字节

描述及存储需求

CHAR(M)

M

M 为 0~255 之间的整数

VARCHAR(M)

M 为 0~65535 之间的整数,值的长度+1 个字节

 

TINYBLOB

允许长度 0~255 字节,值的长度+1 个字节

 

BLOB

允许长度 0~65535 字节,值的长度+2 个字节

 

MEDIUMBLOB

允许长度 0~167772150 字节,值的长度+3 个字节

 

LONGBLOB

允许长度 0~4294967295 字节,值的长度+4 个字节

 

TINYTEXT

允许长度 0~255 字节,值的长度+2 个字节

 

TEXT

允许长度 0~65535 字节,值的长度+2 个字节

 

MEDIUMTEXT

允许长度 0~167772150 字节,值的长度+3 个字节

 

LONGTEXT

允许长度 0~4294967295 字节,值的长度+4 个字节

 

VARBINARY(M)

允许长度 0~M 个字节的变长字节字符串,值的长度+1 个字节

 

BINARY(M)

M

允许长度 0~M 个字节的定长字节字符串

上面标注出来的是常用的。



char 和 varchar 类型

char和varchar很相似,都用来保存MySQL中较短的字符串。


二者的主要区别在于存储方式的不同:

char列的长度固定为创建表时声明的长度,长度可以从0~255的任何值。

varchar列中的值为可变长字符串,长度可以指定为0~255或65535之间的值。

在检索的时候,char列删除了尾部的空格,而varchar则保留这些空格。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值