mysql基础-字段类型及几点讨论事项

目录

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,当数据修改时就会随更新数据而更新时间。管理页面设置如下:

mysql基础-字段类型及几点讨论事项_第1张图片

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 ;

查询结果:

mysql基础-字段类型及几点讨论事项_第2张图片

所以,小数一定要用decimal类型

2.5 int(1) 和 int(12)是能存一样范围数据吗?

答案:是。

很奇怪,大家可以试一下。

2.6 varchar(5)字段的数据长度为多少?

如果存的全是汉字,则长度为15;

如果存的全是字母或数字,则长度为5;

我们可以使用函数LENGTH()测试一下。

你可能感兴趣的:(MySql,mysql,数据库,字段类型,decimal,varchar长度)