02 定义字段类型

02-定义字段类型

整型类型

包括TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和BIGINT

image-20230109154457492

商品编号一般采用INT

浮点数类型和定点数类型

浮点数类型分为FLOAT、DOUBLE、REAL

  • FLOAT表示单精度浮点数
  • DOUBLE表示双精度浮点数
  • REAL默认是DOUBLE,如果把SQL模式设定为REAL_AS_FLOAT,那么REAL就是FLOAT类型
1
SET sql_mode = "REAL_AS_FLOAT"

image-20230109155028175

Mysql按照这个格式存储浮点数的:符号(S)、尾数(M)、阶码(E)

无论有没有符号,MySQL的浮点数都会存储表示符号的部分,因此,所谓的无符号数值取值范围,其实也就是有符号取值范围大于零的部分

浮点数类型的缺陷是不精准,对于精确度要求较高的项目,千万不能使用浮点数!!!

实例演示

1
2
3
4
5
6
7
CREATE TABLE demo.goodsmaster
(
barcode TEXT,
goodsname TEXT,
price DOUBLE,
itemnumber INT PRIMARY KEY AUTO_INCREMENT
);

插入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
-- 第一条
INSERT INTO demo.goodsmaster
(
barcode,
goodsname,
price
)
VALUES
(
'0001',
'书',
0.47
);
-- 第二条
INSERT INTO demo.goodsmaster
(
barcode,
goodsname,
price
)
VALUES
(
'0002',
'笔',
0.44
);
-- 第三条
INSERT INTO demo.goodsmaster
(
barcode,
goodsname,
price
)
VALUES
(
'0002',
'胶水',
0.19
);

查看表里情况

1
SELECT * from demo.goodsmaster

image-20230109161532743

将三个价格加到一起

1
2
SELECT SUM(price)
FROM demo.goodsmaster;

image-20230109161848208

改成FLOAT型,误差更大

image-20230109161933516

精准的数据类型:定点数类型DECIMAL

浮点数是将十进制数转换为二进制数存储,DECIMAL是将十进制的整数部分和小数部分拆改,分别转换成十六进制数,进行存储。

Mysql用DECIMAL(M,D)的方式表示高精度小数,M表示整数部分加小数部分一共有多少位,M<=65,D表示小数部分尾数,D<M

将price的数据类型修改为DECIMAL(5,2)

1
2
ALTER TABLE demo.goodsmaster
MODIFY COLUMN price DECIMAL(5,2);

image-20230109162401666

再一次运行求和语句

1
2
SELECT SUM(price)
FROM demo.goodsmaster;

image-20230109162631852

文本类型

  • CHAR(M):固定长度字符串。CHAR(M) 类型必须预先定义字符串长度。如果太短,数据可能会超出范围;如果太长,又浪费存储空间。
  • VARCHAR(M): 可变长度字符串。VARCHAR(M) 也需要预先知道字符串的最大长度,不过只要不超过这个最大长度,具体存储的时候,是按照实际字符串长度存储的。
  • TEXT:字符串。系统自动按照实际长度存储,不需要预先定义长度。
  • ENUM: 枚举类型,取值必须是预先设定的一组字符串值范围之内的一个,必须要知道字符串所有可能的取值。
  • SET:是一个字符串对象,取值必须是在预先设定的字符串值范围之内的 0 个或多个,也必须知道字符串所有可能的取值。

TEXT也分4种类型:

  • TINYTEXT:255 字符(这里假设字符是 ASCII 码,一个字符占用一个字节,下同)。
  • TEXT: 65535 字符。
  • MEDIUMTEXT:16777215 字符。
  • LONGTEXT: 4294967295 字符(相当于 4GB)。

注意:由于实际存储的长度不确定,MySQL 不允许TEXT 类型的字段做主键。遇到这种情况,你只能采用 CHAR(M),或者 VARCHAR(M)。

日期与时间类型

使用最多的是DATETIME

image-20230109163056213

建议:为了确保数据的完整性和系统的稳定性,优先考虑使用DATETIME 类型。因为虽然 DATETIME 类型占用的存储空间最多,但是它表达的时间最为完整,取值范围也最大。


02 定义字段类型
http://example.com/2023/01/09/02-定义字段类型/
Author
WYX
Posted on
January 9, 2023
Licensed under