提交 3b282b20 编写于 作者: 彭世瑜's avatar 彭世瑜

fix

上级 e22d21d3
...@@ -64,6 +64,3 @@ set character_set_client = gbk; // 让服务器识别客户端传过去的数据 ...@@ -64,6 +64,3 @@ set character_set_client = gbk; // 让服务器识别客户端传过去的数据
set character_set_connection = gbk; // 更好的帮助客户端与服务器端之间惊醒字符集转换 set character_set_connection = gbk; // 更好的帮助客户端与服务器端之间惊醒字符集转换
set character_set_results = gbk; // 告诉客户端服务器返回的数据 set character_set_results = gbk; // 告诉客户端服务器返回的数据
``` ```
https://www.bilibili.com/video/BV1Vx411g7uJ?p=15&spm_id_from=pageDriver
\ No newline at end of file
...@@ -13,3 +13,7 @@ ...@@ -13,3 +13,7 @@
[数据data 基本操作](blog/php-mysql/sql-data.md) [数据data 基本操作](blog/php-mysql/sql-data.md)
[字符集character](blog/php-mysql/character.md) [字符集character](blog/php-mysql/character.md)
[数据类型-整数](blog/php-mysql/sql-int.md)
[数据类型-小数](blog/php-mysql/sql-float.md)
# 数据类型-小数
浮点型:
又称为精度类型,是一种可能丢失精度的数据类型,数据可能不那么准确
简单的举例
```
所有位都为1
整数 1 1 1 1 1 1 1 1 都存整数表示具体数据值
浮点数 1 1 1 | 1 1 1 1 1 10^7 * 数据值,其中3位用来存指数
```
## float 单精度类型
4字节存储,7位精度,表示数据范围比整数大得多
基本语法
```
float 表示不指定小数位的浮点数
float(M, D)表示一共存储M个有效数字,其中小数部分占D位
例如:
float(10, 2) 整数部分为8位,小数部分为2位
```
示例
```sql
create table my_float(
f1 float,
f2 float(10, 2)
);
desc my_float;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| f1 | float | YES | | NULL | |
| f2 | float(10,2) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
insert into
my_float (f1, f2)
values(123.123, 12345678.90);
-- 如果精度丢失,按照四舍五入方式计算
select * from my_float;
+---------+-------------+
| f1 | f2 |
+---------+-------------+
| 123.123 | 12345679.00 |
+---------+-------------+
-- 超出指定位数
insert into
my_float (f1, f2)
values(123.123456789, 123456789.90);
ERROR 1264 (22003): Out of range value for column 'f2' at row 1
-- 用户不能直接插入超过指定整数部分的长度,但是如果是系统自动进位导致,可以允许
insert into
my_float (f1, f2)
values(123.123456789, 99999999.99);
select * from my_float;
+---------+--------------+
| f1 | f2 |
+---------+--------------+
| 123.123 | 12345679.00 |
| 123.123 | 100000000.00 |
+---------+--------------+
-- 浮点数可以采用科学计数法来存储数据
insert into
my_float (f1, f2)
values(123.123, 10e5);
select * from my_float;
+---------+--------------+
| f1 | f2 |
+---------+--------------+
| 123.123 | 12345679.00 |
| 123.123 | 100000000.00 |
| 123.123 | 1000000.00 |
+---------+--------------+
```
- double 双精度,8字节存储,15位精度
定点型
https://www.bilibili.com/video/BV1Vx411g7uJ?p=17&spm_id_from=pageDriver
\ No newline at end of file
# 数据类型-整数
字段类型 |名称 | 字节数 | 表示范围
- | - | - | - |
tinyint | 迷你整型 | 1个字节=8位 | 0-255
smallint | 小整型 | 2个字节 | 0-65535
mediumint | 中整型 | 3个字节 |
int | 整型(标准整型) | 4个字节 |
bigint | 大整型 | 8个字节 |
通常使用较多的是int和tinyint
示例
```sql
create table my_int(
tiny_int tinyint,
small_int smallint,
medium_int mediumint,
int_ int,
big_int bigint
);
-- 插入正确的值
insert into my_int
(tiny_int, small_int, medium_int, int_, big_int)
values
(10, 10000, 100000, 10000000, 1000000);
mysql> select * from my_int;
+----------+-----------+------------+----------+---------+
| tiny_int | small_int | medium_int | int_ | big_int |
+----------+-----------+------------+----------+---------+
| 10 | 10000 | 100000 | 10000000 | 1000000 |
+----------+-----------+------------+----------+---------+
-- 插入一个超出范围的值
insert into my_int
(tiny_int, small_int, medium_int, int_, big_int)
values
(255, 255, 255, 255, 255);
ERROR 1264 (22003): Out of range value for column 'tiny_int' at row 1
-- 原因是tinyint实际取值范围:-128~127,包含了负数
insert into my_int
(tiny_int, small_int, medium_int, int_, big_int)
values
(-128, 255, 255, 255, 255);
select * from my_int;
+----------+-----------+------------+----------+---------+
| tiny_int | small_int | medium_int | int_ | big_int |
+----------+-----------+------------+----------+---------+
| 10 | 10000 | 100000 | 10000000 | 1000000 |
| -128 | 255 | 255 | 255 | 255 |
+----------+-----------+------------+----------+---------+
```
## 无符号标识(unsigned)
只要正数(0-255)
```sql
alter table my_int add unsigned_tiny_int tinyint unsigned first;
-- 插入255
insert into my_int
(unsigned_tiny_int, tiny_int, small_int, medium_int, int_, big_int)
values
(255, 127, 255, 255, 255, 255);
mysql> select * from my_int;
+-------------------+----------+-----------+------------+----------+---------+
| unsigned_tiny_int | tiny_int | small_int | medium_int | int_ | big_int |
+-------------------+----------+-----------+------------+----------+---------+
| NULL | 10 | 10000 | 100000 | 10000000 | 1000000 |
| NULL | -128 | 255 | 255 | 255 | 255 |
| 255 | 127 | 255 | 255 | 255 | 255 |
+-------------------+----------+-----------+------------+----------+---------+
mysql> desc my_int;
+-------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+---------------------+------+-----+---------+-------+
| unsigned_tiny_int | tinyint(3) unsigned | YES | | NULL | |
| tiny_int | tinyint(4) | YES | | NULL | |
| small_int | smallint(6) | YES | | NULL | |
| medium_int | mediumint(9) | YES | | NULL | |
| int_ | int(11) | YES | | NULL | |
| big_int | bigint(20) | YES | | NULL | |
+-------------------+---------------------+------+-----+---------+-------+
```
## 显示长度zerofill
整型数据在显示的时候,最多可以显示的位数
- tinyint(3) 表示最长显示3位,unsigned是正数,0-255不会超过3个长度
- tinyint(4) 表示最长可以显示4位 -128~127
显示长度,只是代表了数据是否可以达到指定的长度,但是不会自动满足到指定长度,如果想要数据显示的时候,保持最高位(显示长度),需要增加zerofill属性
zerofill:从左侧开始填充0到指定位数,自动设置为unsigned
示例
```sql
alter table my_int add zerofill_tiny_int tinyint zerofill first;
desc my_int;
+-------------------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+------------------------------+------+-----+---------+-------+
| zerofill_tiny_int | tinyint(3) unsigned zerofill | YES | | NULL | |
| unsigned_tiny_int | tinyint(3) unsigned | YES | | NULL | |
| tiny_int | tinyint(4) | YES | | NULL | |
| small_int | smallint(6) | YES | | NULL | |
| medium_int | mediumint(9) | YES | | NULL | |
| int_ | int(11) | YES | | NULL | |
| big_int | bigint(20) | YES | | NULL | |
+-------------------+------------------------------+------+-----+---------+-------+
-- 插入数据
insert into my_int
(zerofill_tiny_int, unsigned_tiny_int, tiny_int, small_int, medium_int, int_, big_int)
values
(1, 1, 1, 1, 1, 1, 1);
select * from my_int;
+-------------------+-------------------+----------+-----------+------------+----------+---------+
| zerofill_tiny_int | unsigned_tiny_int | tiny_int | small_int | medium_int | int_ | big_int |
+-------------------+-------------------+----------+-----------+------------+----------+---------+
| NULL | NULL | 10 | 10000 | 100000 | 10000000 | 1000000 |
| NULL | NULL | -128 | 255 | 255 | 255 | 255 |
| NULL | 255 | 127 | 255 | 255 | 255 | 255 |
| 001 | 1 | 1 | 1 | 1 | 1 | 1 |
+-------------------+-------------------+----------+-----------+------------+----------+---------+
```
自定义显示长度,不会改变字段所能表示的数据长度,超出长度不受影响,长度不足会补0
示例
```sql
alter table my_int add zerofill_tiny_int_2 tinyint(2) zerofill first;
desc my_int;
+---------------------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+------------------------------+------+-----+---------+-------+
| zerofill_tiny_int_2 | tinyint(2) unsigned zerofill | YES | | NULL | |
| zerofill_tiny_int | tinyint(3) unsigned zerofill | YES | | NULL | |
| unsigned_tiny_int | tinyint(3) unsigned | YES | | NULL | |
| tiny_int | tinyint(4) | YES | | NULL | |
| small_int | smallint(6) | YES | | NULL | |
| medium_int | mediumint(9) | YES | | NULL | |
| int_ | int(11) | YES | | NULL | |
| big_int | bigint(20) | YES | | NULL | |
+---------------------+------------------------------+------+-----+---------+-------+
insert into my_int
(zerofill_tiny_int_2, zerofill_tiny_int, unsigned_tiny_int, tiny_int, small_int, medium_int, int_, big_int)
values
(100, 100, 100, 100, 100, 100, 100, 100),
(1, 1, 1, 1, 1, 1, 1, 1);
select * from my_int;
+---------------------+-------------------+-------------------+----------+-----------+------------+----------+---------+
| zerofill_tiny_int_2 | zerofill_tiny_int | unsigned_tiny_int | tiny_int | small_int | medium_int | int_ | big_int |
+---------------------+-------------------+-------------------+----------+-----------+------------+----------+---------+
| NULL | NULL | NULL | 10 | 10000 | 100000 | 10000000 | 1000000 |
| NULL | NULL | NULL | -128 | 255 | 255 | 255 | 255 |
| NULL | NULL | 255 | 127 | 255 | 255 | 255 | 255 |
| NULL | 001 | 1 | 1 | 1 | 1 | 1 | 1 |
| 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
| 01 | 001 | 1 | 1 | 1 | 1 | 1 | 1 |
+---------------------+-------------------+-------------------+----------+-----------+------------+----------+---------+
```
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册