目录
1.主要字段类型
1.1整数
1.2.浮点数类型
1.3.文本类型
1.4.日期与时间类型
2.讨论几点有关字段类型的事
2.1 时间类型字段用字符还是datetime?
2.2 时间类型字段如何设置随时间更新?
2.3 字段长度够用即可
2.4 小数的字段类型选择,一定要选择decimal
2.5 int(1) 和 int(12)是能存一样范围数据吗?
2.6 varchar(5)字段的数据长度为多少?
1.主要字段类型
主要的字段类型:整数、浮点数、文本类型、日期与时间类型
1.1整数
类型 | 占用字节数 | 取值范围 |
---|---|---|
tinyint | 1 | -128~127 |
smallint | 2 | -32768~32767 |
mediumint | 3 | -8388608~8388607 |
int | 4 | -2147483648~2147483647 |
bigint | 8 | -9223372036854775808~9223372036854775807 |
1.2.浮点数类型
类型 | 占用字节 |
---|---|
float | 4 |
double | 8 |
1.3.文本类型
类型 | 占用字节 |
---|---|
char | 指定字符长度 |
varchar | 变长字符长度 |
tinytext | 255 |
text | 65535 |
mediumtext | 16777215 |
longtext | 4294967295 |
1.4.日期与时间类型
类型 | 占用字节 |
---|---|
year | 1 |
time | 3 |
date | 3 |
datetime | 8 |
timestamp | 4 |
2.讨论几点有关字段类型的事
2.1 时间类型字段用字符还是datetime?
应该用dateime字段,
存储空间来看:如果精确到s的时间,varchar类型占用14个字符,而datetime只占用8个字符
查询性能:datetime类型比较依然比字符类型比较性能更好
2.2 时间类型字段如何设置随时间更新?
表结构设计如下:
CREATE TABLE `t_time` (
`id` int(12) NOT NULL,
`value` varchar(255) DEFAULT NULL COMMENT '数值',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
注意上边的创建时间和更新时间,默认值设置为CURRENT_TIMESTAMP,即为当前时间,数据创建的时间就会赋值为当前时间。设置为ON UPDATE CURRENT_TIMESTAMP,当数据修改时就会随更新数据而更新时间。管理页面设置如下:
2.3 字段长度够用即可
一定不要随意设置,只要够用即可。例如:varchar(255),不要随便设置这么长度。虽然是变长存储,但是对于查询依然有损性能。
2.4 小数的字段类型选择,一定要选择decimal
示例,表结构如下:
CREATE TABLE `t_calc` (
`id` int(12) NOT NULL,
`money` float DEFAULT NULL COMMENT '金额',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
表中插入数据如下:
INSERT INTO `ys_t1`.`t_calc`(`id`, `money`) VALUES (1, 0.1);
INSERT INTO `ys_t1`.`t_calc`(`id`, `money`) VALUES (2, 0.9);
INSERT INTO `ys_t1`.`t_calc`(`id`, `money`) VALUES (3, 0.2);
select sum(money) from t_calc ;
查询结果:
所以,小数一定要用decimal类型
2.5 int(1) 和 int(12)是能存一样范围数据吗?
答案:是。
很奇怪,大家可以试一下。
2.6 varchar(5)字段的数据长度为多少?
如果存的全是汉字,则长度为15;
如果存的全是字母或数字,则长度为5;
我们可以使用函数LENGTH()测试一下。