MySQL:数据类型 作者:马育民 • 2021-03-29 23:04 • 阅读:10116 # 介绍 [![](https://www.malaoshi.top/upload/pic/mysql/20180606105956467.png)](https://www.malaoshi.top/upload/pic/mysql/20180606105956467.png) # 字符串类型 |类型 |大小 |说明 | | ------------ | ------------ | ------------ | |**CHAR(n)** |0-255 bytes |定长字符串,不足个数后面补空格 | |**VARCHAR(n)** |0-65535 bytes |变长字符串 | |类型 |大小 |说明 | | ------------ | ------------ | ------------ | |TINYTEXT |0-255 bytes |短文本字符串 | |**TEXT** |0-65 535 bytes |长文本数据 | |MEDIUMTEXT |0-16 777 215 bytes |中等长度文本数据 | |LONGTEXT |0-4 294 967 295 bytes |极大文本数据 | ### 使用 `char(n)` 和 `varchar(n)` 中的 `n` 代表字符的个数 如:`CHAR(30)` 可以存储 30 个字符 # 整型 |类型 |大小 |范围(有符号) |范围(无符号) |说明 | | ------------ | ------------ | ------------ | ------------ | ------------ | |TINYINT |1 byte |(-128,127) |(0,255) |小整数值| |SMALLINT |2 bytes |(-32 768,32 767) |(0,65 535) |大整数值| |MEDIUMINT |3 bytes |(-8 388 608,8 388 607) |(0,16 777 215) |大整数值| |**INT** |4 bytes |(-2 147 483 648,2 147 483 647) |(0,4 294 967 295) |大整数值| |BIGINT |8 bytes |(-9,223,372,036,854,775,808,9 223 372 036 854 775 807) |(0,18 446 744 073 709 551 615) |极大整数值| ### TINYINT 注意事项 **问题:** TINYINT 长度是 `1` 时,且值为 `0`、`1`,JDBC查询出来的值是 `Boolean` 类型,而不是 `Integer` 类型 **解决:** 长度大于 `1` 即可 # 浮点型 |类型 |大小 |范围(有符号) |范围(无符号) |说明 | | ------------ | ------------ | ------------ | ------------ | ------------ | |FLOAT |4 byte |(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) |0,(1.175 494 351 E-38,3.402 823 466 E+38) |单精度浮点数值| |DOUBLE |8 byte |(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) |0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) |双精度浮点数值| ### 使用 定义方式为: `FLOAT(M,D)` `DOUBLE(M,D)` **解释:** - M:`整数` 的个数 + `小数` 的个数 - D:`小数` 的个数 ### 例子 `FLOAT(7,4)` 可以显示为`999.9999`。MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001。 ### 缺点 由于计算机只能存储二进制,所以浮点型数据在存储的时候,必须转化成二进制,在换算时,会导致数字不准确 ``` CREATE TABLE `f` ( `f1` float(10,2) DEFAULT NULL ) ``` ``` insert into a value (131072.32); ``` ``` select * from f; ``` 结果是: `131072.31` # 定点小数类型 **DECIMAL** 和 NUMERIC 类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值。 定点数以 **字符串** 形式存储,对精度要求高时使用 decimal 较好,比如 **金额** ### 使用 ``` DECIMAL(M,D) ``` **解释:** - M:`整数` 的个数 + `小数` 的个数,默认值为 `10`,取值范围为`1~65`,取`0`时会被设为默认值,超出范围会报错 - D:`小数` 的个数,默认值为0,取值范围为`0~30`,而且必须 `<=M`,超出范围会报错。 某字段定义为decimal类型不带任何参数,等同于 `decimal(10,0)` 。带一个参数时,D取默认值。 ### 例子 ``` DECIMAL(3,2) ``` 上例中的取值范围为 `-999.99~999.99` 如果存储时,整数部分超出了范围(如上面的例子中,添加数值为1000.01),MySql就会报错,不允许存这样的值。 如果存储时,小数点部分若超出范围,就分以下情况: - 若四舍五入后,整数部分没有超出范围,则只警告,但能成功操作并四舍五入删除多余的小数位后保存。如999.994实际被保存为999.99。 - 若四舍五入后,整数部分超出范围,则MySql报错,并拒绝处理。如999.995和-999.995都会报错。 # 日期和时间类型 [![](https://www.malaoshi.top/upload/pic/mysql/QQ20210330000024.png)](https://www.malaoshi.top/upload/pic/mysql/QQ20210330000024.png) ### 应用场景 - DATE:如 生日 - TIME:定时时间 - DATETIME:创建时间、上一次修改时间 ### Timestamp 由于范围小,不推荐使用 # 二进制类型 BLOB 是二进制大对象,可以容纳可变数量的数据 |类型 |大小 |说明 | | ------------ | ------------ | ------------ | |TINYBLOB |0-255 bytes |二进制 | |**BLOB** |0-65 535 bytes |二进制 | |MEDIUMBLOB |0-16 777 215 bytes |二进制 | |LONGBLOB |0-4 294 967 295 bytes |二进制 | BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串 感谢: https://blog.csdn.net/anxpp/article/details/51284106 https://blog.csdn.net/donghaixiaolongwang/article/details/74905954 原文出处:http://malaoshi.top/show_1IXqmffp4Wm.html