From 3b282b206897199a99d52aafa06bd0077879b93b Mon Sep 17 00:00:00 2001 From: pengshiyu <1940607002@qq.com> Date: Fri, 18 Mar 2022 22:57:49 +0800 Subject: [PATCH] fix --- blog/php-mysql/character.md | 3 - blog/php-mysql/index.md | 4 + blog/php-mysql/sql-float.md | 97 +++++++++++++++++++ blog/php-mysql/sql-int.md | 184 ++++++++++++++++++++++++++++++++++++ 4 files changed, 285 insertions(+), 3 deletions(-) create mode 100644 blog/php-mysql/sql-float.md create mode 100644 blog/php-mysql/sql-int.md diff --git a/blog/php-mysql/character.md b/blog/php-mysql/character.md index 72f3501..9227c72 100644 --- a/blog/php-mysql/character.md +++ b/blog/php-mysql/character.md @@ -64,6 +64,3 @@ set character_set_client = gbk; // 让服务器识别客户端传过去的数据 set character_set_connection = gbk; // 更好的帮助客户端与服务器端之间惊醒字符集转换 set character_set_results = gbk; // 告诉客户端服务器返回的数据 ``` - - -https://www.bilibili.com/video/BV1Vx411g7uJ?p=15&spm_id_from=pageDriver \ No newline at end of file diff --git a/blog/php-mysql/index.md b/blog/php-mysql/index.md index 013893a..3d75e24 100644 --- a/blog/php-mysql/index.md +++ b/blog/php-mysql/index.md @@ -13,3 +13,7 @@ [数据data 基本操作](blog/php-mysql/sql-data.md) [字符集character](blog/php-mysql/character.md) + +[数据类型-整数](blog/php-mysql/sql-int.md) + +[数据类型-小数](blog/php-mysql/sql-float.md) diff --git a/blog/php-mysql/sql-float.md b/blog/php-mysql/sql-float.md new file mode 100644 index 0000000..5e18f30 --- /dev/null +++ b/blog/php-mysql/sql-float.md @@ -0,0 +1,97 @@ +# 数据类型-小数 + +浮点型: + +又称为精度类型,是一种可能丢失精度的数据类型,数据可能不那么准确 + +简单的举例 + +``` +所有位都为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 diff --git a/blog/php-mysql/sql-int.md b/blog/php-mysql/sql-int.md new file mode 100644 index 0000000..6fe38fd --- /dev/null +++ b/blog/php-mysql/sql-int.md @@ -0,0 +1,184 @@ +# 数据类型-整数 + +字段类型 |名称 | 字节数 | 表示范围 +- | - | - | - | +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 -- GitLab