高性能MySQL学习四(整数、浮点、字符串、ENUM枚举、日期时间、位等数据类型)

本文详细介绍了MySQL中的数据类型,包括整数(有符号/无符号)、浮点数(float、double)和定点数(decimal)的存储和使用,强调了浮点数的精度问题。此外,还讨论了字符串类型,如char、varchar、BLOB和TEXT的特性及性能考虑。枚举(ENUM)类型和日期时间(DATE、TIME、DATETIME)类型的特点也被提及,特别是TIMESTAMP与DATETIME的时区相关性。最后,位数据类型(SET和BIT)的存储和使用也进行了阐述。
摘要由CSDN通过智能技术生成

1、整数类型
在这里插入图片描述
这些整数类型的存储值的范围可以从-2(N-1) 到2(N-1) ,其中N是存储空间的位数。整数类型可选的UNSIGNED属性表示不允许负值,着大致可以使得正数的上限提高一倍。有符号和无符号使用相同的存储空间,具有相同的性能。
在这里插入图片描述

mysql> create table t1(ida int,idb int(5));
Query OK, 0 rows affected, 1 warning (0.07 sec)

mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| ida   | int(11) | YES  |     | NULL    |       |		//不指定宽度,默认为int(11)
| idb   | int(5)  | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> insert into t1 values(1,1);
Query OK, 1 row affected (0.01 sec)

mysql> select * from t1;
+------+------+
| ida  | idb  |
+------+------+
|    1 |    1 |
+------+------+
1 row in set (0.00 sec)

mysql> alter table t1 modify ida int zerofill;		//加入zerofill参数
Query OK, 1 row affected, 1 warning (0.09 sec)
Records: 1  Duplicates: 0  Warnings: 1

mysql> alter table t1 modify idb int(5) zerofill;
Query OK, 1 row affected, 2 warnings (0.09 sec)
Records: 1  Duplicates: 0  Warnings: 2

mysql> select * from t1;
+------------+-------+
| ida        | idb   |
+------------+-------+
| 0000000001 | 00001 |
+------------+-------+
1 row in set (0.00 sec)

2、实数类型
在这里插入图片描述
对于小数的表示,MySQL分为两种方式:浮点数和定点数。浮点数包括float和double,定点数为decimal,定点数在MySQL中以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。MySQL内部使用double作为浮点计算的类型,decimal是一种存储格式,在计算中会转换为double。
在这里插入图片描述
我们可以使用 “数据类型(整数位,小数位)” 的方式指定浮点列所需要的精度,但这会导致MySQL在存储时对值进行取舍,如下所示。所以我们尽量只指定数据类型,而不指定精度。

mysql> create table t2(id1 float(5,2),
    -> id2 double,
    -> id3 decimal);
Query OK, 0 rows affected, 1 warning (0.06 sec)

mysql> desc t2;
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id1   | float(5,2)    | YES  |     | NULL    |       |
| id2   | double        | YES  |     | NULL    |       |
| id3   | decimal(10,0) | YES  |     | NULL    |       |		//不指定精度时默认为decimal(10,0)
+-------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> insert into t2 values(1.233,1.233,1.233);
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> show warnings;		//decimal数据超越精度值会报错
+-------+------+------------------------------------------+
| Level | Code | Message                                  |
+-------+------+------------------------------------------+
| Note  | 1265 | Data truncated for column 'id3' at row 1 |
+-------+------+------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from t2;
+------+-------+------+
| id1  | id2   | id3  |
+------+-------+------+
| 1.23 | 1.233 |    1 |
+------+-------+------+		//float只保存了1.23,decimal列也被截断
1 row in set (0.00 sec)

3、字符串类型
(1)char和varchar
这是两种最主要的字符串类型。
在这里插入图片描述
在这里插入图片描述
以下演示环境为MySQL8.0.17

mysql> desc t3;
+---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值