整型
MySQL 可以为整数类型指定宽度,例如 INT(11)
,对大多数应用这是没有意义的:它不会限制值的合法范围,只是规定了 MySQL 的一些交互工具(例如 MySQL 命令行客户端)用来显示字符的个数。对于存储和计算来说,INT(1)
和 INT(20)
是相同的。只有使用 ZEROFILL
属性时,指定长度才有意义(按照指定长度进行零的填充)。
所以,在不使用 ZEROFILL
时,不需要指定整形的长度。
- TINYINT
空间占用为1 byte
(8 bit
) 。使用无符号类型(UNSIGNED
)时,8
位都是1
时所表示的十进制数为255
,所以其可存储的范围为0 ~ 255
。使用有符号类型时,范围为-128 ~ 127
。 - SMALLINT
空间占用为2 byte
,可存储的无符号范围为0 ~ 65535
,有符号范围为-32768 ~ 32767
。 - MEDIUMINT
空间占用为3 byte
,可存储的无符号范围为0 ~ 16777215
,有符号范围为-8388608 ~ 8388607
。 - INT
空间占用为4 byte
,可存储的无符号范围为0 ~ 4294967295
,有符号范围为-2147483648 ~ 2147483647
。 - BIGINT
空间占用为8 byte
,可存储的无符号范围为0 ~ 18446744073709551615
,有符号范围为-9223372036854775808 ~ 9223372036854775807
。
参考链接:MySQL 整型长度的含义
文本
CHAR
- 定长字符串,设定该类型字段时需要指定长度,存储时会向右边补充空格到指定长度。
- 该类型所指定的长度是指字符的个数(无论中文/英文/中文标点/英文标点,只要是一个符号就会占用一个个数),而不是字符串所占的字节数。 例如,CHAR(6) 类型的字段用于存储字符串 “
Hello!
” 和 “你好,世界!
” 都是可以的。 - 该类型可设定的
最大长度
为255
个字符。
VARCHAR
- 变长字符串,设定该类型字段时同样需要指定长度,长度同样是指最多可存储的字符个数。
- 可设定的最大有效长度取决于行长度限制,详见:MySQL中varchar最大长度是多少。
TINYTEXT
- 最多可存储
255 byte
的文本内容,也就是说在UTF8
编码下可以存储255
个英文字母/英文符号,而汉字/中文符号最多只能存储85
(255/3
)个。以下类型同样可推算。
- 最多可存储
TEXT
- 最多可存储
65535 byte 约等于 65KB
的文本内容。
- 最多可存储
MEDIUMTEXT
- 最多可存储
16777215 byte 约等于 16MB
的文本内容。
- 最多可存储
LONGTEXT
- 最多可存储
4294967295 byte 约等于 4GB
的文本内容。
- 最多可存储
日期与时间
TIMESTAMP
- 时间戳,范围从
1970-01-01 00:00:01 UTC
到2038-01-09 03:14:07 UTC
(UTC
转换成东八区时间需要+08:00
),存储为自纪元(1970-01-01 00:00:00 UTC
)起的秒数。 - 虽然内部存储的是秒数,但是在读写该类型字段时都是以日期时间字符串的形式进行的,例如,查询到的实际是一个字符串
'2019-06-11 23:18:45'
,执行INSERT
或UPDATE
操作时,也是需要传入一个日期时间字符串。 - 时间戳类型也可以指定长度,用以表示秒级以下的精度,最高可设为
6
。例如,当精度为5
时查询或传入的字符串形式为'2019-06-12 13:22:21.35927'
。
- 时间戳,范围从
JSON
用于存储 JSON
文本,不可以指定长度,不可以设定默认值。