MySQL数据库基础:数据类型详解-文本字符串类型
创始人
2024-01-20 12:41:29

前言

正好趁着这次一起学习复习一下MySQL数据库的基本知识。也是一直在用这个数据库,有些基础的知识点长久不用就会遗忘,就比如数据类型溢出的问题,很多时候建表的时候随便给定个类似,结果导入数据的时候报错又得删表就很麻烦,如果提前做好数据长度设置可以有效的避免这个问题而且还能节省很多空间,因此对MySQL所有数据类型做个总结是一个值得的选择。

最好的总结方式就是根据学习顺序整理出一张思维导图可以帮我们很快的梳理清楚思路:

该系列文章将按照这个脉络行文,此系列文章将被纳入我的专栏一文速学SQL各类数据库操作,基本覆盖到使用SQL处理日常业务以及常规的查询建库分析以及复杂操作方方面面的问题。从基础的建库建表逐步入门到处理各类数据库复杂操作,以及专业的SQL常用函数讲解都花费了大量时间和心思创作,如果大家有需要从事数据分析或者数据开发的朋友推荐订阅专栏,将在第一时间学习到最实用常用的知识。此篇博客篇幅较长,值得细读实践一番,我会将精华部分挑出细讲实践。博主会长期维护博文,有错误或者疑惑可以在评论区指出,感谢大家的支持。 我有一篇文章已经把MySQL的时间类型数据梳理的十分完善了: 故时间类型数据就不再细讲了。本文主要详解的是文本字符串数据类型说明以及实际操作运用。主要

一、CHAR与VARCHAR类型

他们两个都可以存储较短的字符串,char类型的字段长度是声明的时候就固定的,最小取值为0,最大取值为255。如果保存时,数据的实际长度比CHAR类型声明的长度小,则会在右侧填充空格以达到指定的长度。当MySQL检索CHAR类型的数据时,CHAR类型的字段会去除尾部的空格。对于CHAR类型的数据来说,定义CHAR类型字段时,声明的字段长度即为CHAR类型字段所占的存储空间的字节数。

VARCHAR类型修饰的字符串是一个可变长的字符串,长度的最小值为0,最大值为65535。检索VARCHAR类型的字段数据时,会保留数据尾部的空格。 VARCHAR类型的字段所占用的存储空间为字符串实际长度加1个字节。 我们创建一个表来实验一下就知道了:

create table mytable1(vc VARCHAR(4),c CHAR(4));      
INSERT INTO mytable1 (vc, c) VALUES ('abc', 'abc');

此时没有空格正常插入,再来看看有空格的情况下:

INSERT INTO mytable1 (vc, c) VALUES ('a  ', 'a  ');

SELECT LENGTH(vc), LENGTH(c) FROM mytable1;

vc保存的字符串空格占位保留,而char则不保留尾部空格。我们再追加一个b:

SELECT CONCAT(vc, 'b'), CONCAT(c, 'b') FROM mytable1;

可见, VARCHAR类型的字段vc保留了尾部的空格,而CHAR类型的字段c则去除了尾部的空格。

二、TEXT类型

1.text

Text用来保存文本类型的字符串,总共包含4种类型,分别为TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT类型。在向TEXT类型的字段保存和查询数据时,不会删除数据尾部的空格,这一点和VARCHAR类型相同。

create table mytable2(t TEXT);
INSERT INTO mytable2 (t) VALUES ('a  ');
SELECT LENGTH(t) FROM mytable2;

SELECT CONCAT(t, 'b') FROM mytable2;

三、ENUM类型

ENUM类型也叫作枚举类型,ENUM类型的取值范围需要在定义字段时进行指定,其所需要的存储空间由定义ENUM类型时指定的成员个数决定。当ENUM类型包含1~255个成员时,需要1个字节的存储空间;当ENUM类型包含256~65535个成员时,需要2个字节的存储空间。ENUM类型的成员个数的上限为65535个。

CREATE TABLE mytable3(
sex ENUM('男','女','unknow')
);
INSERT INTO mytable3
VALUES('男'),('女');INSERT INTO mytable3
VALUES('UNKNOW');

这里可以发现ENUM是忽略大小写的,已声明的数据为准。

当加入未定义的数值时就会报错:

当添加多个定义的值,也会报错:

可以使用索引进行枚举元素的调用,下标从 1 开始:

INSERT INTO mytable3
VALUES('1'),(2);

没有限制非空的情况下,可以添加null值:

INSERT INTO mytable3
VALUES(NULL);

四、SET类型

SET表示一个字符串对象,可以包含0个或多个成员,但成员个数的上限为64。当SET类型包含的成员个数不同时,其所占用的存储空间也是不同的。

成员个数范围(L表示实际成员个数)占用存储空间
1<=L<=81个字节
9<=L<=162个字节
17<=L<=243个字节
25<=L<=324个字节
33<=L<=648个字节

SET类型在存储数据时一定程度上,成员个数越多,其占用的存储空间越大。注意:SET类型在选取成员时,可以一次选择多个成员,这一点与ENUM类型不同。

CREATE TABLE mytable4(
sex SET('男','女','unknow')
);
INSERT INTO mytable4(sex)
VALUES('男'),('男,女');

可以向SET类型的字段中插入多个以逗号分隔的有效成员值。

当向表中的SET类型的字段s插入重复的SET类型成员时,MySQL会自动删除重复的成员。

INSERT INTO mytable4(sex)
VALUES ('男,女,女');

当向SET类型的字段插入SET成员中不存在的值时,MySQL会抛出错误。

五、JSON类型

在MySQL 5.7中,就已经支持JSON数据类型。在MySQL 8.x版本中,JSON类型提供了可以进行自动验证的JSON文档和优化的存储结构,使得在MySQL中存储和读取JSON类型的数据更加方便和高效。

CREATE TABLE mytable5 (id_info JSON);

插入JSON数据。

INSERT INTO mytable5 (id_info) VALUES ('{"name":"fanstuck", "age":23, "address":{"province":"zhejiang", "city":"hangzhou"}}');

当需要检索JSON类型的字段中数据的某个具体值时,可以使用“->”和“->>”符号。

SELECT id_info->'$.name' as name,id_info->'$.address.city' as city
FROM mytable5

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
阳澄湖在哪里哪个省的 阳澄湖是... 点击题目下方苏州生活指南有用 有趣 有态度近期的阳澄湖度很高,3月24日,央视二套《第一时间》直播连...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
金属硬度排行 各种金属硬度 世界上最硬的东西排名分别为硫化碳块,石墨烯,金刚石,金属玻璃和金属锇。这五种物体几乎是整个世界上最坚...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...