Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
檀越@新空间
Coding Tree
提交
edeb48dd
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看板
提交
edeb48dd
编写于
3月 23, 2022
作者:
彭世瑜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
3f46ca27
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
208 addition
and
66 deletion
+208
-66
blog/php-mysql/index.md
blog/php-mysql/index.md
+4
-0
blog/php-mysql/sql-enum.md
blog/php-mysql/sql-enum.md
+79
-0
blog/php-mysql/sql-set.md
blog/php-mysql/sql-set.md
+109
-0
blog/php-mysql/sql-string.md
blog/php-mysql/sql-string.md
+16
-66
未找到文件。
blog/php-mysql/index.md
浏览文件 @
edeb48dd
...
@@ -21,3 +21,7 @@
...
@@ -21,3 +21,7 @@
[
数据类型-时间日期类型
](
blog/php-mysql/sql-datetime.md
)
[
数据类型-时间日期类型
](
blog/php-mysql/sql-datetime.md
)
[
数据类型-字符串类型
](
blog/php-mysql/sql-string.md
)
[
数据类型-字符串类型
](
blog/php-mysql/sql-string.md
)
[
数据类型-enum 枚举类型
](
blog/php-mysql/sql-enum.md
)
[
数据类型-Set集合
](
blog/php-mysql/sql-set.md
)
blog/php-mysql/sql-enum.md
0 → 100644
浏览文件 @
edeb48dd
# 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
|
+
--------+
|
男
|
|
女
|
|
男
|
+
--------+
```
枚举的意义
-
规范数据本身,限定只能插入规定的数据项
-
节省存储空间
blog/php-mysql/sql-set.md
0 → 100644
浏览文件 @
edeb48dd
# Set集合
多个数据选项可以同时保存,本质按照对应的二进制位来控制
-
1表示选中
-
0表示没有选中
语法
```
set('值1', '值2'...)
```
```
1个字节,set只能有8个选项
2个字节,set只能有16个选项
3个字节,set只能有24个选项
8个字节,set只能有64个选项
```
set和enum一样,最终存储到数据字段中的依然是数字而不是真实的字符串
```
sql
create
table
my_set
(
hobby
set
(
'篮球'
,
'足球'
,
'羽毛球'
,
'乒乓球'
)
);
mysql
>
desc
my_set
;
+
-------+------------------------------------------------+------+-----+---------+-------+
|
Field
|
Type
|
Null
|
Key
|
Default
|
Extra
|
+
-------+------------------------------------------------+------+-----+---------+-------+
|
hobby
|
set
(
'篮球'
,
'足球'
,
'羽毛球'
,
'乒乓球'
)
|
YES
|
|
NULL
|
|
+
-------+------------------------------------------------+------+-----+---------+-------+
-- 多个选项逗号隔开
insert
into
my_set
(
hobby
)
values
(
'篮球,足球,乒乓球'
);
mysql
>
select
*
from
my_set
;
+
-------------------------+
|
hobby
|
+
-------------------------+
|
篮球
,
足球
,
乒乓球
|
+
-------------------------+
-- 数据选项与插入的顺序无关,最终会变成选项对应的顺序
insert
into
my_set
(
hobby
)
values
(
'足球,篮球'
);
mysql
>
select
*
from
my_set
;
+
-------------------------+
|
hobby
|
+
-------------------------+
|
篮球
,
足球
,
乒乓球
|
|
篮球
,
足球
|
+
-------------------------+
```
## 数据存储的方式
系统将对应的数据选项按照顺序进行编排,从第一个开始进行占位,每一个都对应一个二进制位
数据存储的时候,如果被选中,那么对应的为的值就变为1,否则为0
系统在存储的时候,会自动将的得到的二进制反转,然后转换成十进制存储
```
set('篮球','足球','羽毛球','乒乓球')
1 1 1 1
('篮球,足球,乒乓球')
1 1 0 1
反转: 1 0 1 1 =》 1 + 2 + 8 = 11
('足球,篮球')
1 1 0 0
反转: 0 0 1 1 =》 1 + 2 = 3
```
```
sql
-- 以数值方式查看数字
mysql
>
select
hobby
+
0
from
my_set
;
+
-----------+
|
hobby
+
0
|
+
-----------+
|
11
|
|
3
|
+
-----------+
```
可以插入数值代替实际插入
```
sql
mysql
>
insert
into
my_set
(
hobby
)
values
(
15
);
mysql
>
select
hobby
from
my_set
;
+
-----------------------------------+
|
hobby
|
+
-----------------------------------+
|
篮球
,
足球
,
乒乓球
|
|
篮球
,
足球
|
|
篮球
,
足球
,
羽毛球
,
乒乓球
|
+
-----------------------------------+
```
集合的意义
-
规范数据
-
节省存储空间
-
enum单选
-
set复选
blog/php-mysql/sql-string.md
浏览文件 @
edeb48dd
...
@@ -51,78 +51,28 @@ char 和 varchar 选择
...
@@ -51,78 +51,28 @@ char 和 varchar 选择
2、如果数据超过 255 个字符,一定选择 text
2、如果数据超过 255 个字符,一定选择 text
##
enum 枚举类型
##
MySQL记录长度
例如:
MySQL规定:记录长度(record == 行row), 总长度不能超过65535个字节
```
性别 gender 男 女 保密
```
基本语法
```
enum(数据值 1,数据值 2...);
```
-
数据值列表在 255 个以内,使用 1 个字节来存储
-
数据值列表超过 255,但是小于 65535,使用 2 个字节来存储
```
sql
varchar 能够存储的理论值65535个字符,字符在不同的字符集下可能占用多个字节
-- 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
|
+
--------+
|
男
|
|
女
|
+
--------+
```
varchar处理存储数据本身要占用空间,还需要额外的空间来保存记录长度
枚举可以规范数据
证明:varchar在MySQL中能够达到的理论值
```
utf8 65535 / 3 = 21845,需要2个字节保存长度
gbk 65535 / 2 = 32767...1,需要2个字节保存长度
```
枚举类型存储的不是真正的字符串,而是存储了下标
```
sql
```
sql
-- MySQL 会自动类型转换,+、-、\*、/ 会将数据转换成数值,普通字符串转换为数值 0
create
table
my_utf8
(
select
gender
+
0
from
my_enum
;
name
varchar
(
21844
)
)
charset
utf8
;
mysql
>
select
gender
+
0
from
my_enum
;
+
------------+
|
gender
+
0
|
+
------------+
|
1
|
|
2
|
+
------------+
-- 可以直接插入数值数据
insert
into
my_enum
(
gender
)
values
(
1
);
mysql
>
select
*
from
my_enum
;
+
--------+
|
gender
|
+
--------+
|
男
|
|
女
|
|
男
|
+
--------+
create
table
my_gbk
(
name
varchar
(
32766
)
)
charset
gbk
;
```
```
枚举的意义
https://www.bilibili.com/video/BV1Vx411g7uJ?p=24&spm_id_from=pageDriver
\ No newline at end of file
-
规范数据本身,限定只能插入规定的数据项
-
节省存储空间
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录