02 定义字段类型
02-定义字段类型
整型类型
包括TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和BIGINT
商品编号一般采用INT
浮点数类型和定点数类型
浮点数类型分为FLOAT、DOUBLE、REAL
- FLOAT表示单精度浮点数
- DOUBLE表示双精度浮点数
- REAL默认是DOUBLE,如果把SQL模式设定为
REAL_AS_FLOAT
,那么REAL就是FLOAT类型
1 |
|
Mysql按照这个格式存储浮点数的:符号(S)、尾数(M)、阶码(E)
无论有没有符号,MySQL的浮点数都会存储表示符号的部分,因此,所谓的无符号数值取值范围,其实也就是有符号取值范围大于零的部分
浮点数类型的缺陷是不精准,对于精确度要求较高的项目,千万不能使用浮点数!!!
实例演示
1 |
|
插入数据
1 |
|
查看表里情况
1 |
|
将三个价格加到一起
1 |
|
改成FLOAT型,误差更大
精准的数据类型:定点数类型DECIMAL
浮点数是将十进制数转换为二进制数存储,DECIMAL是将十进制的整数部分和小数部分拆改,分别转换成十六进制数,进行存储。
Mysql用DECIMAL(M,D)的方式表示高精度小数,M表示整数部分加小数部分一共有多少位,M<=65,D表示小数部分尾数,D<M
将price的数据类型修改为DECIMAL(5,2)
1 |
|
再一次运行求和语句
1 |
|
文本类型
- 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
建议:为了确保数据的完整性和系统的稳定性,优先考虑使用DATETIME 类型。因为虽然 DATETIME 类型占用的存储空间最多,但是它表达的时间最为完整,取值范围也最大。
02 定义字段类型
http://example.com/2023/01/09/02-定义字段类型/