Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
檀越@新空间
Coding Tree
提交
3f46ca27
C
Coding Tree
项目概览
檀越@新空间
/
Coding Tree
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Coding Tree
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
3f46ca27
编写于
3月 21, 2022
作者:
彭世瑜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
3b282b20
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
277 addition
and
3 deletion
+277
-3
blog/php-mysql/index.md
blog/php-mysql/index.md
+4
-0
blog/php-mysql/sql-datetime.md
blog/php-mysql/sql-datetime.md
+94
-0
blog/php-mysql/sql-float.md
blog/php-mysql/sql-float.md
+51
-3
blog/php-mysql/sql-string.md
blog/php-mysql/sql-string.md
+128
-0
未找到文件。
blog/php-mysql/index.md
浏览文件 @
3f46ca27
...
@@ -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
)
blog/php-mysql/sql-datetime.md
0 → 100644
浏览文件 @
3f46ca27
## 时间日期类型
类型 | 名称 | 存储字节数| 格式 | 表示范围 | 初始值
-
| - | - | - | - | -
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保存时间戳
blog/php-mysql/sql-float.md
浏览文件 @
3f46ca27
...
@@ -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
```
blog/php-mysql/sql-string.md
0 → 100644
浏览文件 @
3f46ca27
## 字符串类型
## 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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录