数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据。
1、整数类型
整数类型有 tinyint
、smallint
、mediumint
、int
、bigint
,其属性字段可以添加unsigned
无符号、 auto-increament
自增约束条件
类型名称 | 占用空间 | 存储有符数值范围 | 存储无符数值范围 |
---|---|---|---|
tinyint | 1个字节 | -2^7 ~ 2^7-1 | 0~2^8-1 |
smallint | 2个字节 | -2^15 ~ 2^15-1 | 0~2^16 -1 |
mediumint | 3个字节 | -2^23 ~ 2^23-1 | 0~2^24-1 |
int | 4个字节 | -2^31 ~ 2^31-1 | 0~2^32-1 |
bigint | 8个字节 | -2^39 ~ 2^39-1 | 0~2^40-1 |
2、浮点类型
单精度浮点数float
和双精度浮点数double
定点类型decimal
3、字符串类型
字符串类型char
、varchar
、tinytext
、text
、mediumtext
、longtext
,存储非二进制字符串
类型名称 | 占用空间 |
---|---|
char | M 字节,1<=M<=255 |
varchar | L+1字节,在此,L< = M和 1<=M<=2^16-1 |
tinytext | L+1字节,在此,L<2^8 |
text | L+2字节,在此,L<2^16 |
mediumtext | L+3字节,在此,L<2^24 |
longtext | L+4字节,在此,L<2^32 |
varchar(m) 是长度可变的字符串,m 表示最大列的长度。varchar 的最大实际长度由最长的行的大小和使用的字符集确定,而实际占用的空间为字符串的实际长度加 1(字符串结束字符)。
4、日期和时间类型
表示日期的数据类型:year
、time
、date
、datetime
、timestamp
每一个类型都有合法的取值范围,当指定确定不合法的值时,系统将“零”值插入数据库中。
类型名称 | 日期格式 | 日期范围 | 占用空间 |
---|---|---|---|
year | YYYY | 1901 ~ 2155 | 1 个字节 |
time | HH:MM:SS | -838:59:59 ~ 838:59:59 | 3个字节 |
date | YYYY-MM-DD | 1000-01-01 ~ 9999-12-3 | 3个字节 |
timestamp | YYYY-MM-DD HH:MM:SS | 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC | 4个字节 |
datetime | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8个字节 |
4.1、year类型
- 以 4 位字符串或者 4 位数字格式表示的 YEAR
- 以 2 位字符串格式表示的year,范围为 ‘00’ 到 ‘99’,‘00’~’69’ 和 ‘70’~’99’ 范围的值分别被转换为 2000~2069 和 1970~1999 范围的 YEAR 值。‘0’ 与 ‘00’ 的作用相同。插入超过取值范围的值将被转换为 2000。
- 以 2 位数字表示的year,范围为 1~99,1~99 和 70~99 范围的值分别被转换为 2001~2069 和 1970~1999 范围的 YEAR 值。注意,在这里 0 值将被转换为 0000,而不是 2000。
4.2、date类型
- 以 ‘YY-MM-DD’ 或者 ‘YYMMDD’ 字符串格式表示日期,在这里YY表示两位的年值,2 位字符串格式表示的‘YY’,规则同
year
。 - 以 YYMMDD 数字格式表示的日期,与前面相似。
- Mysql 允许“不严格”语法:任何标点符号都可以用作日期部分之间的间隔符。例如,‘98-11-31’、‘98.11.31’、‘98/11/31’和’98@11@31’ 是等价的,这些值也可以正确地插入数据库。
- datetime同date