08、MySQL—字符串型
字符串型
1、Char
定长字符:指定长度之后,系统一定会分配指定的空间用于存储数据
|
基本语法: char(L),L代表字符数(中文与英文字母一样),L长度为0到255 |
2、Varchar
变长字符:指定长度之后,系统会根据实际存储的数据来计算长度,分配合适的长度(数据没有超出长度)
|
基本语法: Varchar(L),L代表字符数,L的长度理论值位0到65535 |
因为varchar要记录数据长度(系统根据数据长度自动分配空间),所以每个varchar数据产生后,系统都会在数据后面增加1-2个字节的额外开销:是用来保存数据所占用的空间长度
如果数据本身小于127个字符:额外开销一个字节;如果大于127个,就开销两个字节
(1) 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 |
(2) Char和varchar的区别
1、 char一定会使用指定的空间,varchar是根据数据来定空间
2、 char的数据查询效率比varchar高:varchar是需要通过后面的记录数来计算
说明:
如果确定数据一定是占指定长度,那么使用char类型;
如果不确定数据到底有多少,那么使用varchar类型;
如果数据长度超过255个字符,不论是否固定长度,都会使用text,不再使用char和varchar
3、Text
文本类型:本质上mysql提供了两种文本类型
Text:存储普通的字符文本
Blob:存储二进制文本(图片,文件),一般都不会使用blob来存储文件本身,通常是使用一个链接来指向对应的文件本身。
(1) Text:系统中提供的四种text
(2) Tinytext:系统使用一个字节来保存,实际能够存储的数据为:2 ^ 8 + 1
(3) Text:使用两个字节保存,实际存储为:2 ^ 16 + 2
(4) Mediumtext:使用三个字节保存,实际存储为:2 ^ 24 + 3
(5) Longtext:使用四个字节保存,实际存储为:2 ^ 32 + 4
注意:
(1) 在选择对应的存储文本的时候,不用刻意去选择text类型,系统会自动根据存储的数据长度来选择合适的文本类型。
(2) 在选择字符存储的时候,如果数据超过255个字符,那么一定选择text存储
4、Enum
枚举类型:在数据插入之前,先设定几个项,这几个项就是可能最终出现的数据结果。
如果确定某个字段的数据只有那么几个值:如性别,男、女、保密,系统就可以在设定字段的时候规定当前字段只能存放固定的几个值:那么就使用枚举
|
基本语法: enum(数据值1,数据值2…) |
系统提供了1到2个字节来存储枚举数据:通过计算enum列举的具体值来选择实际的存储空间:如果数据值列表在255个以内,那么一个字节就够,如果超过255但是小于65535,那么系统采用两个字节保存。
① 创建表

② 插入数据:合法数据,字段对应的值必须是设定表的时候所确定的值

③ 错误数据:enum有规范数据的功能,能够保证插入的数据必须是设定的范围,其他类型都不可以

④ 枚举enum的存储原理:实际上字段上所存储的值并不是真正的字符串,而是字符串对应的下标:当系统设定枚举类型的时候,会给枚举中每个元素定义一个下标,这个下标规则从1开始
Enum(1=>‘男’,2=>’女’,3=>’保密’)
特性:在mysql中系统是自动进行类型转换的:如果数据碰到“+、-、*、/”系统就会自动将数据转换成 数值,而普通字符串转换成数值为0
范例:查看enum元素的值
|
Select 字段名 + 0 from 表名; |

⑤ 既然实际enum字段存储的结果是数值:那么在进行数据插入的时候,就可以使用对应的数值来进行。

枚举的意义:
(1) 规范数据本身,限定只能插入规定的数据项
(2) 节省存储空间
5、Set
集合:是一种将多个数据选项可以同时保存的数据类型,本质是将指定的项按照对应的二进制位来进行控制:1表示该选项被选中,0表示该选项没有被选中。
|
基本语法: set(‘值1’,’值2’,’值3’…) |
系统为set提供了多个字节进行保存,但是系统会自动计算来选择具体的存储单元
|
1个字节:set只能有8个选项 |
|
2个字节:set只能有16个选项 |
|
3个字节:set只能表示24个选项 |
|
8个字节:set可以表示64个选项 |
Set和enum一样,最终存储到数据字段中的依然是数字而不是真实的字符串
① 创建表

② 插入数据:可以插入多个数据,就是在数据插入的字符串中,使用对应的逗号“,”将选项进行隔开

③ 数据选项所在的数据与数据插入的顺序无关:最终都会变成选项对应的顺序

④ 分析数据存储的方式
(1) 系统将对应的数据选项(设计)按照顺序进行编排:从第一个开始进行占位,每一个都对应一个二进制位。

(2) 数据在存储的时候,如果被选中,那么对应的位的值就为1,否则为0

(3) 系统在进行存储的时候会自动将得到的最终的二进制颠倒过来,然后再进行转换成十进制存储

⑤ 查看数据:按照自动转换成数值来查看

⑥ 既然是数值,那么就可以插入数值来代替实际插入数据

注意:数字插入的前提是对应的二进制位上都有对应的数据项
Set集合的意义: 规范数据、节省存储空间
Enum:单选框
Set:复选框
08、MySQL—字符串型的更多相关文章
- MySQL中的数据类型 [数值型、字符串型、时间日期型]
MySQL中的数据类型 [数值型.字符串型.时间日期型] MySQL中各数据类型 1. 数值类型(整型) 类型 数据大小 类型 (无符号:unsigned) 数据大小 存储空间 tinyint -12 ...
- Mysql Order By 字符串排序,mysql 字符串order by
Mysql Order By 字符串排序,mysql 字符串order by ============================== ©Copyright 蕃薯耀 2017年9月30日 http ...
- python进阶08 MySQL基础补充
python进阶08 MySQL基础补充 本次课程都是基于三张表格的使用 一.子查询 #如何找到‘张三’的成绩 #思路:先找到张三的学号,在拿这个张三的学号到成绩表里面去匹配,得出成绩 #如何用一条查 ...
- Mysql字符串截取总结及项目实际运用:left()、right()、substring()、substring_index()
在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些,mysql有很多字符串函数可以用来处理这些需求,如Mysql字符串截取总结:l ...
- mysql字符串类型(枚举类型)
原文链接:https://blog.csdn.net/qq_34530405/article/details/81738907 本文记录MySql数据库中enum类型数据的使用细节和注意事项. 首先在 ...
- Mysql字符串字段判断是否包含某个字符串的3种方法
方法一: SELECT * FROM users WHERE emails like "%b@email.com%"; 方法二: 利用MySQL 字符串函数 find_in_set ...
- MySQL字符串函数substring:字符串截取
MySQL 字符串截取函数:left(), right(), substring(), substring_index().还有 mid(), substr().其中,mid(), substr() ...
- Path形状获取字符串型变量数据
Path形状获取字符串型变量数据: var path = new Path(); path.Data = Geometry.Parse("M 100,200 C 100,25 400,350 ...
- MySQL字符串转日期类型
MySQL字符串转日期类型 select str_to_date('2014-08-20 00:00:00', '%Y-%m-%d %H:%i:%s'); >2014-08-20 00:00:0 ...
随机推荐
- C++ Primer Plus的若干收获--(十一)
本篇主要讲了转换函数的利与弊以及简要介绍流与iostream文件 因为在本篇仍然要使用上篇的Stonewt类,这里首先给出其代码 <span style="font-size:18px ...
- [转帖 ]MySQL 5.7 新特性 JSON
MySQL 5.7 新特性 JSON 的创建,插入,查询,更新 作者: 我不是鱼 (2016-08-31 16:13)分类: MySQL 标签: MySQL JSON MySQL JSON 应用 ...
- MVC 自定义路由规则
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mv ...
- 查看安卓APK源码破解
原文:查看安卓APK源码破解 工具准备: <1>.android4me的AXMLPrinter2工具 <2>dex2jar <3>jd-gui 工具下载:http: ...
- 关于"云服务器被检测到对外攻击已阻断该服务器对其它服务器端口的访问"的解决措施
前段时间阿里云大量发送云服务器对外攻击的信息到邮箱中,邮件信息大概如下: 您的云服务器(XX.XX.XX.XX)由于被检测到对外攻击,已阻断该服务器对其它服务器端口(TCP:XX)的访问,阻断预计将在 ...
- Winform 点击TreeView控件节点的CheckBox不触发NodeMouseClick事件的做法
private void Tv_areainfo_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (!e.Node. ...
- Win10《芒果TV》内测版现已支持在国行版 Xbox One 下载体验
Win10<芒果TV>内测版现已支持在国行版 Xbox One 下载体验 关于国行为什么无法从商店下载安装芒果TV内测版(来自微软) 1.截至到目前<芒果TV - Preview&g ...
- 【Windows10 IoT开发系列】配置篇
原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...
- 使用Chart控件进行实时监控
Chart作为微软提供绘制图表的控件,在刚开始使用时非常的迷茫,因为功能强大,涉及到的知识多, 一开始难以接收过来,但后天经过查找资料,耐心学习,终于还是有了一定的收获. Chart相当于一个大的图纸 ...
- 淘宝开源Key/Value结构数据存储系统Tair技术剖析
摘要: Tair的功能 Tair是一个Key/Value结构数据的解决方案,它默认支持基于内存和文件的两种存储方式,分别和我们通常所说的缓存和持久化存储对应. Tair除了普通Key/Value系统提 ...