“d41b623a72d81d39e61ed1c5f16c1ba0607e4acb”上不存在“cmake/git@gitcode.net:s920243400/PaddleDetection.git”
提交 3f46ca27 编写于 作者: 彭世瑜's avatar 彭世瑜

fix

上级 3b282b20
...@@ -17,3 +17,7 @@ ...@@ -17,3 +17,7 @@
[数据类型-整数](blog/php-mysql/sql-int.md) [数据类型-整数](blog/php-mysql/sql-int.md)
[数据类型-小数](blog/php-mysql/sql-float.md) [数据类型-小数](blog/php-mysql/sql-float.md)
[数据类型-时间日期类型](blog/php-mysql/sql-datetime.md)
[数据类型-字符串类型](blog/php-mysql/sql-string.md)
## 时间日期类型
类型 | 名称 | 存储字节数| 格式 | 表示范围 | 初始值
- | - | - | - | - | -
Date | 日期类型 | 3字节 | `YYYY-mm-dd` | `1000-01-01~9999-12-12` | `0000-00-00`
Time | 时间类型 | 3字节 | `HH:ii:ss` | `-838:59:59~838:59:59` |
Datetime | 日期时间类型 | 8字节 | `YYYY-mm-dd HH:ii:ss` | `1000-01-01 00:00:00 ~ 9999-12-12 23:59:59` | `0000-00-00 00:00:00` |
Timestamp | 时间戳类型 | | `YYYY-mm-dd HH:ii:ss` | 表示从格林威治时间开始
Year| 年类型 | 1字节 | `0~99`/ 四位数具体年 | `1900-2155`
特殊性:
1、year 插入2位数,有如下规则
- 69以下为20+
- 70以上为19+
2、timestamp可以自动更新
```sql
timestamp null default current_timestamp on update current_timestamp
```
3、time可以存放小时超过24的值
4、时间time,可以使用简单的`日期 + 空格 + 数字`,会自动转换该数字成`天数*24 + 后面的时间`
示例
```sql
create table my_date(
date_field date,
time_field time,
datetime_field datetime,
timestamp_field timestamp,
year_field year
);
mysql> desc my_date;
+-----------------+-----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-----------+------+-----+---------+-------+
| date_field | date | YES | | NULL | |
| time_field | time | YES | | NULL | |
| datetime_field | datetime | YES | | NULL | |
| timestamp_field | timestamp | YES | | NULL | |
| year_field | year(4) | YES | | NULL | |
+-----------------+-----------+------+-----+---------+-------+
-- 插入正常数据
insert into
my_date(date_field, time_field, datetime_field, timestamp_field, year_field)
values ('1970-01-01', '10:12:12', '1970-01-01 10:12:12', '1970-01-01 10:12:12', 1970);
mysql> select * from my_date;
+------------+------------+---------------------+---------------------+------------+
| date_field | time_field | datetime_field | timestamp_field | year_field |
+------------+------------+---------------------+---------------------+------------+
| 1970-01-01 | 10:12:12 | 1970-01-01 10:12:12 | 1970-01-01 10:12:12 | 1970 |
+------------+------------+---------------------+---------------------+------------+
-- 插入time小时数超过24
insert into
my_date(date_field, time_field, datetime_field, timestamp_field, year_field)
values ('1970-01-01', '512:12:12', '1970-01-01 10:12:12', '1970-01-01 10:12:12', 50);
mysql> select * from my_date;
+------------+------------+---------------------+---------------------+------------+
| date_field | time_field | datetime_field | timestamp_field | year_field |
+------------+------------+---------------------+---------------------+------------+
| 1970-01-01 | 10:12:12 | 1970-01-01 10:12:12 | 1970-01-01 10:12:12 | 1970 |
| 1970-01-01 | 512:12:12 | 1970-01-01 10:12:12 | 1970-01-01 10:12:12 | 2050 |
+------------+------------+---------------------+---------------------+------------+
-- time格式转换
insert into
my_date(date_field, time_field, datetime_field, timestamp_field, year_field)
values ('1970-01-01', '5 12:12:12', '1970-01-01 10:12:12', '1970-01-01 10:12:12', 50);
mysql> select * from my_date;
+------------+------------+---------------------+---------------------+------------+
| date_field | time_field | datetime_field | timestamp_field | year_field |
+------------+------------+---------------------+---------------------+------------+
| 1970-01-01 | 10:12:12 | 1970-01-01 10:12:12 | 1970-01-01 10:12:12 | 1970 |
| 1970-01-01 | 512:12:12 | 1970-01-01 10:12:12 | 1970-01-01 10:12:12 | 2050 |
| 1970-01-01 | 132:12:12 | 1970-01-01 10:12:12 | 1970-01-01 10:12:12 | 2050 |
+------------+------------+---------------------+---------------------+------------+
```
PHP中的时间转换函数
- 字符串转时间戳 strtotime
- 时间戳转字符串 date
通常使用int保存时间戳
...@@ -89,9 +89,57 @@ select * from my_float; ...@@ -89,9 +89,57 @@ select * from my_float;
+---------+--------------+ +---------+--------------+
``` ```
- double 双精度,8字节存储,15位精度 ## double 双精度
8个字节存储,表示范围更大,精度有15位左右
定点型 ## 定点数decimal
https://www.bilibili.com/video/BV1Vx411g7uJ?p=17&spm_id_from=pageDriver 能够保证数据精确的小数(小数部分可能不精确,超出长度会四舍五入),整数部分一定精确
\ No newline at end of file
decimal(M, D), M表示总长度,最大值不能超过65,D代表小数部分长度,最长不能超过30
```sql
create table my_decimal(
float_data float(10, 2),
decimal_data decimal(10, 2)
);
mysql> desc my_decimal;
+--------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------------+------+-----+---------+-------+
| float_data | float(10,2) | YES | | NULL | |
| decimal_data | decimal(10,2) | YES | | NULL | |
+--------------+---------------+------+-----+---------+-------+
insert into
my_decimal(float_data, decimal_data)
values(12345678.90, 12345678.90);
mysql> select * from my_decimal;
+-------------+--------------+
| float_data | decimal_data |
+-------------+--------------+
| 12345679.00 | 12345678.90 |
+-------------+--------------+
insert into
my_decimal(float_data, decimal_data)
values(99999999.99, 99999999.99);
mysql> select * from my_decimal;
+--------------+--------------+
| float_data | decimal_data |
+--------------+--------------+
| 12345679.00 | 12345678.90 |
| 100000000.00 | 99999999.99 |
+--------------+--------------+
-- 定点数,整数部分被进位,会抛出异常
insert into
my_decimal(float_data, decimal_data)
values(99999999.99, 99999999.999);
ERROR 1264 (22003): Out of range value for column 'decimal_data' at row 1
```
## 字符串类型
## char 和 varchar
1、char 定长字符
char(L) L 代表字符数(0-255)
2、varchar 变长字符
varchar(L) L 代表字符数(0-65535)
每个 varchar 数据,都会增加 1-2 个字节来保存数据所占用的空间长度
- 数据本身小于 127 个字符,额外开销 1 个字节
- 数据本身大于 127 个字符,额外开销 2 个字节
char 和 varchar 对比, utf8,一个字符都会占用 3 个字节
| 存储数据 | char(2) | varchar(2) | char 所占字节 | varchar 所占字节 |
| -------- | ------- | ---------- | ------------- | ---------------- |
| A | A | A | `2 * 3 = 6` | `1 * 3 + 1 = 4` |
| AB | AB | AB | `2 * 3 = 6` | `2 * 3 + 1 = 7` |
char 和 varchar 区别
- char 一定会使用指定的空间,varchar 根据数据来定空间
- char 的数据查询效率比 varchar 高,varchar 需要通过后面的记录数来计算
char 和 varchar 选择
- 如果确定数据的长度,使用 char
- 不确定数据的长度,使用 varchar
- 如果数据长度超过 255 个字符,一般使用 text
## text 文本类型
- text 存储普通的字符文本
- blob 存储二进制文件(图片,文件),一般不使用,通常使用一个连接来指向对应的文件
| 类型 | 字节数 | 实际存储数据量 |
| ---------- | -------- | -------------- |
| tinytext | 1 个字节 | `2^8 + 1` |
| text | 2 个字节 | `2^16 + 2` |
| mediumtext | 3 个字节 | `2^24 + 3` |
| longtext | 4 个字节 | `2^32 + 4` |
注意:
1、不用刻意选择 text 类型,系统会自动根据存储的数据长度来选择合适的文本类型
2、如果数据超过 255 个字符,一定选择 text
## enum 枚举类型
例如:
```
性别 gender 男 女 保密
```
基本语法
```
enum(数据值 1,数据值 2...);
```
- 数据值列表在 255 个以内,使用 1 个字节来存储
- 数据值列表超过 255,但是小于 65535,使用 2 个字节来存储
```sql
-- Enum(0=>'男', 1=>'女', 2=>'保密')
create table my_enum(
gender enum('男', '女', '保密')
)
mysql> desc my_enum;
+--------+----------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------------------------+------+-----+---------+-------+
| gender | enum('男','女','保密') | YES | | NULL | |
+--------+----------------------------+------+-----+---------+-------+
-- 插入规范数据
insert into my_enum (gender) values ('男');
insert into my_enum (gender) values ('女');
mysql> select * from my_enum;
+--------+
| gender |
+--------+
| |
| |
+--------+
```
枚举可以规范数据
枚举类型存储的不是真正的字符串,而是存储了下标
```sql
-- MySQL 会自动类型转换,+、-、\*、/ 会将数据转换成数值,普通字符串转换为数值 0
select gender + 0 from my_enum;
mysql> select gender + 0 from my_enum;
+------------+
| gender + 0 |
+------------+
| 1 |
| 2 |
+------------+
-- 可以直接插入数值数据
insert into my_enum (gender) values (1);
mysql> select * from my_enum;
+--------+
| gender |
+--------+
| |
| |
| |
+--------+
```
枚举的意义
- 规范数据本身,限定只能插入规定的数据项
- 节省存储空间
https://www.bilibili.com/video/BV1Vx411g7uJ?p=22&spm_id_from=pageDriver
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册