MySQL 常用数据类型
一、数值类型
INT
(或INTEGER
): 整数值,支持 -2147483648~2147483647(如果是 UNSIGNED,为 0~4294967295,边界值都可以取到)的数。
一般来说,只需要用到 INT 类型,比如,存储数据的 id。
二、串类型
即字符串类型。
CHAR
: 定长串。大小是 0 ~ 255 个字节。注意,不是字符。而我们在定义时用的CHAR(n)
中的 n 表示字符。要注意,英文字符是一个字符的大小为一个字节。而中文的一个字符的长度,要分类讨论。UTF-8 编码一个汉字等 = 3 个字节;GBK编码一个汉字 = 2 个字节。它的长度必须在创建时指定,否则 MySQL 假定为CHAR(1)
。VARCHAR
: 变长串。大小是 0 ~ 65532 个字节。同样地,要注意字节与字符的区别。如果在创建时指定为VARCHAR(n)
,则可存储 0 到 n 个字符的变长串(其中$n \leq 255$
)。
串类型中最常用的就是 CHAR
和 VARCHAR
这两个类型,关于在何种情况下使用这两个类型,我曾经在一篇国外博客看到如下总结(原文链接已经遗失):
- 经常变化的字段用 VARCAHR
- 知道固定长度的字段用 CHAR
- 知道固定长度的字段用 CHAR
- 超过 255 字符的只能用 VARCHAR 或者 TEXT
- 能用 VARCHAR 的地方不能用 TEXT
三、日期和时间数据类型
类型 | 大小(bytes) | 取值范围 | 格式 | 用途 | 零值 | |
---|---|---|---|---|---|---|
DATE | 3 | 1000-01-01~9999-12-31 | YYYY-MM-DD | 日期值 | 0000:00:00 | |
TIME | 3 | -838:59:59~838:59:59 | HH:MM:SS | 时间值或持续时间 | 00:00:00 | |
DATETIME | 8 | 1000-01-01 00:00:00~9999-12-31 23:59:59 | YYYY-MM-HH:MM:SS | 混合日期和时间值 | 0000-00-00 00:00:00 | |
YEAR | 1 | 1901~2155 | YYYY | 年份值 | 0000 | |
TIMESTAMP | 4 | 1970-01-01 00:00:00~2038-01-19 03:14:07(格林尼治时间) 开始时间是 0 秒,结束时间是第 2147483647 秒 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 | 0000-00-00 00:00:00 |
关于这里的取值范围,官方文档有这样的说法:
For the DATE and DATETIME range descriptions, “supported” means that although earlier values might work, there is no guarantee.
要注意,也就是说,比如 DATE 可能支持插入数据 0999-01-01,但是 MySQL 并不保证这一点。这里具有明确范围的是 TIMESTAMP。我在使用时会严格按照支持的范围进行插值。
3.1、DATE
- 一般来讲,我会使用严格的
YYYY-MM-DD
来给 DATE 类型的数据赋值。 - 使用
current_date
或current_date()
或now()
来插入当前的系统时间。
示例
3.2、TIME
- 注意到 TIME 类型的范围是
-838:59:59~838:59:59
,838 这个表示小时的数字是为了表示某种特殊需要的时间间隔。 - 一般来说,只需要严格按照格式
HH:MM:SS
进行插值即可。 - 使用
current_time
或current_time()
或now()
来插入当前时间。
示例
3.3、DATETIME
- 我在插值时会严格按照格式
YYYY-MM-DD HH:MM:SS
来进行插值。 - 使用
now()
来插入当前系统的日期和时间。
示例
3.4、YEAR
- 我会严格按照格式
YYYY
来进行插值。
示例
3.5、TIMESTAMP
- TIMESTAMP 类型在 MySQL 中也是以
YYYY-MM-DD HH:MM:SS
的形式显示的,其形式和 DATETIME 一样,它们的差异在于范围。 - 这里我就直接使用给 DATETIME 赋值的方式来给 TIMESTAMP 赋值。
- 使用
now()
插入当前系统的时间。
示例
MySQL 常用数据类型
http://fanyfull.github.io/2021/08/04/MySQL-常用数据类型/