【⑭MySQL | 数据类型(二)】字符串 | 二进制类型

前言

✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL字符串 | 二进制类型类型的分享

目录

  • 前言
      • 5 字符串类型
      • 6 二进制类型
      • 总结


在这里插入图片描述

5 字符串类型

字符串类型用来存储字符串数据,还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比较,还可以进行正则表达式的匹配查找。

下表中列出了 MySQL 中的字符串数据类型,括号中的M表示可以为其指定长度。

类型名称说明长度范围占用的存储空间
CHAR(M)固定长度0<=M<=255M 个字节
VARCHAR(M)变长字符串0<=M<=65535M+1个字节
TINYTEXT非常小字符串0<=L<=255L+1字节
TEXT小的字符串0<=L<=65535L+2字节
MEDIUMTEXT中等大小的字符串0<=L<=16777215L+3字节
LONGTEXT大的字符串0<=L<=4294967295L+4字节
ENUM枚举类型,只能有一个枚举字符串值0<=L<=655351或2个字节,取决于枚举值的数目 (最大值为65535)
SET字符串集合,字符串对象可以有零个或 多个SET成员0<=L<=641、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员)

CHAR 和 VARCHAR 类型

CHAR 和 VARCHAR 类型都可以存储比较短的字符串。

类型特点长度长度范围占用存储空间
CHAR(M)固定长度M0<=M<=255M个字节
VARCHAR(M)可变长度M0<=M<=65535(实际长度+1/2)个字节

CHAR类型:

  • CHAR(M) 为固定长度字符串,在定义时指定字符串长度。如果不指定,则默认为1个字符。

  • 如果保存时,数据的实际长度比CHAR类型声明的长度小,则会在右侧填充空格以达到指定的长度。当检索 CHAR 值时,尾部的空格将被删除。

  • 定义CHAR类型字段时,申明的字段长度即为CHAR类型字段所占的存储空间的字节数。

CREATE TABLE test_char
(f1 CHAR,f2 CHAR(5)
);DESC test_char;INSERT INTO test_char(f1) VALUES('h');
#Data too long for column 'f1' at row 1
INSERT INTO test_char(f1) VALUES('he');
INSERT INTO test_char(f1) VALUES('你');INSERT INTO test_char(f2) VALUES('C语言');
#Data too long for column 'f2' at row 1
INSERT INTO test_char(f2) VALUES('C语言Plus');#测试在右侧填充的空格,会在查询的时候去掉的情况
SELECT CONCAT(f2,'***') FROM test_char;
#注意:自己插入的空格也会被去掉
INSERT INTO test_char(f2) VALUES('fk  ');SELECT * FROM test_char;

VARCHAR类型:

  • VARCHAR(M) 定义时,必须指定长度M,否则会报错。

  • VARCHAR(M)指的是能存储M个字符,而实际占用的空间为字符串的实际长度加 1或者2。

  • VARCHAR 在值保存和检索时尾部的空格仍保留。

#错误,没有指定长度
CREATE TABLE test_varchar
(name VARCHAR
);CREATE TABLE test_varchar
(name VARCHAR(5)
);INSERT INTO test_varchar VALUES('星星'),('太阳月亮');
#Data too long forcolumn 'NAME' at row 1
INSERT INTO test_varchar VALUES('星星太阳月亮');

TEXT 类型

TEXT用来保存文本类型的字符串,如文章内容、评论等。当保存或查询 TEXT 列的值时,不删除尾部空格。

TEXT 类型分为 4 种:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。不同的 TEXT 类型的存储空间和数据长度不同。

在向TEXT类型的字段插入数据时,系统自动按照实际长度存储,不需要预先定义长度。

类型说明大小(字节)
TINYTEXT小文本0<=L<=255
TEXT普通文本0<=L<=65535
MEDIUMTEXT中等大小文本0<=L<=16777215
LONGTEXT长文本0<=L<=4294967295 (相当于4GB字符)

TEXT文本类型,可以存储比较大的文本段,搜索速度稍慢,因此如果不是特别大的内容,建议使用CHAR,VARCHAR来替代。还有TEXT类型不用加默认值,加了也没用。

ENUM 类型

ENUM 类型也叫作枚举类型,ENUM类型的取值范围需要在定义字段是进行指定。设置字段值时,ENUM类型只允许从成员中选取单个值,不能一次选取多个值。如果创建的成员中有空格,尾部的空格将自动被删除。

类型长度范围占用存储空间
ENUM1<=L<=655351或2个字节
  • ENUM 值在内部用整数表示,每个枚举值均有一个索引值;
  • 列表值所允许的成员值从 1 开始编号,MySQL 存储的就是这个索引编号,枚举最多可以有 65535 个元素。

ENUM 值依照列索引顺序排列,并且空字符串排在非空字符串前,NULL 值排在其他所有枚举值前。

提示:ENUM 列总有一个默认值。如果将 ENUM 列声明为 NULL,NULL 值则为该列的一个有效值,并且默认值为 NULL。如果 ENUM 列被声明为 NOT NULL,其默认值为允许的值列表的第 1 个元素。

  • 查看enum字段的所有值
SELECT
column_type
FROM
information_schema. COLUMNS
WHERE
#TABLE_SCHEMA = "test" AND
DATA_TYPE = 'enum'
AND table_name="test_enum"
AND column_name="ch";
  • 测试
CREATE TABLE test_enum
(gender ENUM('男','女','unknown')
);INSERT INTO test_enum VALUES('男');
#Data truncated for column 'ch' at row 1
INSERT INTO test_enum VALUES('中');
#可以使用索引来插入枚举元素(注意:索引从1开始)
INSERT INTO test_enum VALUES(1),('2');#当enum字段没有申明为NOT NULL时,插入NULL也是合法的
INSERT INTO test_enum VALUES(NULL);SELECT * FROM test_enum;

SET 类型

SET 是一个字符串的对象,可以有零或多个值,SET 列最多可以有 64 个成员,值为表创建时规定的一列值。

成员个数范围占用的存储空间
1<=L<=81个字节
9<=L<=162个字节
17<=L<=243个字节
25<=L<=324个字节
33<=L<=648个字节
  • 与 ENUM 类型相同,SET 值在内部用整数表示,列表中每个值都有一个索引编号。当创建表时,SET 成员值的尾部空格将自动删除。

  • 但与 ENUM 类型不同的是,ENUM 类型的字段只能从定义的列值中选择一个值插入,而 SET 类型的列可从定义的列值中选择多个字符的联合。

提示:如果插入 SET 字段中的列值有重复,则 MySQL 自动删除重复的值;插入 SET 字段的值的顺序并不重要,MySQL 会在存入数据库时,按照定义的顺序显示;

测试

CREATE TABLE test_set
(hobby SET('吃饭','睡觉','写Bug')
);INSERT INTO test_set VALUES('吃饭');INSERT INTO test_set VALUES('吃饭,睡觉');#重复插入时,会自动删除重复数据
INSERT INTO test_set VALUES('吃饭,睡觉,吃饭');
#插入的值在set中不存在时,会报错
INSERT INTO test_set VALUES('吃饭,睡觉,花钱');SELECT * FROM test_set;

6 二进制类型

MySQL中的二进制字符串类型主要存储一些二进制数据,比如可以存储图片、音频、视频等二进制数据。

包括 BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。

下表中列出了 MySQL 中的二进制数据类型,括号中的M表示可以为其指定长度。

类型名称说明大小(字节)
BIT(M)位字段类型大约 (M+7)/8 字节
BINARY(M)固定长度二进制字符串M 字节
VARBINARY (M)可变长度二进制字符串M+1 字节
TINYBLOB (M)非常小的BLOBL+1 字节,在此,L<2^8
BLOB (M)小 BLOBL+2 字节,在此,L<2^16
MEDIUMBLOB (M)中等大小的BLOBL+3 字节,在此,L<2^24
LONGBLOB (M)非常大的BLOBL+4 字节,在此,L<2^32

BIT 类型

位字段类型。M 表示每个值的位数,范围为 1~64。如果 M 被省略,默认值为 1。如果为 BIT(M) 列分配的值的长度小于 M 位,在值的左边用 0 填充。例如,为 BIT(6) 列分配一个值 b’101’,其效果与分配 b’000101’ 相同。

BIT 数据类型用来保存位字段值,例如以二进制的形式保存数据 13,13 的二进制形式为 1101,在这里需要位数至少为 4 位的 BIT 类型,即可以定义列类型为 BIT(4)。大于二进制 1111 的数据是不能插入 BIT(4) 类型的字段中的。

提示:默认情况下,MySQL 不可以插入超出该列允许范围的值,因而插入数据时要确保插入的值在指定的范围内。

BINARY 和 VARBINARY 类型

BINARY 和 VARBINARY 类型类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字节字符串。使用的语法格式如下:

列名称 BINARY(M) 或者 VARBINARY(M)

BINARY 类型的长度是固定的,指定长度后,不足最大长度的,将在它们右边填充 “\0” 补齐,以达到指定长度。例如,指定列数据类型为 BINARY(3),当插入 a 时,存储的内容实际为 “a\0\0”,当插入 ab 时,实际存储的内容为“ab\0”,无论存储的内容是否达到指定的长度,存储空间均为指定的值 M。

VARBINARY 类型的长度是可变的,指定好长度之后,长度可以在 0 到最大值之间。例如,指定列数据类型为 VARBINARY(20),如果插入的值长度只有 10,则实际存储空间为 10 加 1,实际占用的空间为字符串的实际长度加 1。

BLOB 类型

BLOB 是一个二进制的对象,用来存储可变数量的数据。BLOB 类型分为 4 种:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB,它们可容纳值的最大长度不同,如下表所示。

数据类型存储范围
TINYBLOB最大长度为255 (28-1)字节
BLOB最大长度为65535 (216-1)字节
MEDIUMBLOB最大长度为16777215 (224-1)字节
LONGBLOB最大长度为4294967295或4GB (231-1)字节

BLOB 列存储的是二进制字符串(字节字符串),TEXT 列存储的是非进制字符串(字符字符串)。BLOB 列是字符集,并且排序和比较基于列值字节的数值;TEXT 列有一个字符集,并且根据字符集对值进行排序和比较。

总结

总的来说,选择合适的数据类型可以提高数据库的性能、节省存储空间、确保数据的一致性和有效性,并方便进行数据处理和计算。因此,在设计数据库时,选择合适的数据类型非常重要。~下节带来MySQL视图的分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/82364.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓系列机型-禁止安装某软件 防止“沉迷游戏的小孩”操作解析

如何禁止安装某软件。这里以好课帮app为例做个演示步骤说明。这个博文的目的在于可以阻止他人用手机安装你指定的一些软件。 &#x1f494;&#x1f494;&#x1f494;首先手机上安装好课帮这个软件。打开应用详情找到包名。或者使用第三方工具打开获取这个软件的包名。记住是…

Nevron 3DChart Crack,可视化界面在运行时可用

Nevron 3DChart Crack,可视化界面在运行时可用 3DChart使用OpenGL 3D图形引擎创建复杂的2D和3D图表&#xff0c;这些图表可以包含静态或动画图像。3DChart包括一个用于生成图表模板的独立应用程序和一个ASP服务器配置实用程序。该组件还包括一个专门设计用于与3DChart集成的工具…

maven打出jar中动态替换占位符

使用场景&#xff1a; maven打出的jar中pom.xml动态替换占位符 有些时候某些公共工具jar包被项目引用后发现公共jar的pom.xml中的version依然还是占位符&#xff0c;例如下面 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok<…

微信录屏怎么录?2种方法教会你

“微信怎么录屏呀&#xff0c;奶奶不会用微信&#xff0c;打电话跟她讲&#xff0c;怎么也说不清楚&#xff0c;老人家年纪大了&#xff0c;耳朵不好使&#xff0c;就想录一个微信使用教程给她&#xff0c;可是不懂怎么录屏&#xff0c;有人知道微信怎么录屏吗&#xff0c;感谢…

线性代数的学习和整理4: 求逆矩阵的多种方法汇总

目录 原始问题&#xff1a;如何求逆矩阵&#xff1f; 1 EXCEL里&#xff0c;直接可以用黑盒表内公式 minverse() 数组公式求A- 2 非线性代数方法&#xff1a;解方程组的方法 3 增广矩阵的方法 4 用行列式的方法计算&#xff08;未验证&#xff09; 5 A-1/|A|*A* &…

带着问题看SpringBoot

带着问题看SpringBoot 1、Spring容器具体是什么&#xff1f; 跟进run方法&#xff0c;context this.createApplicationContext()&#xff0c;得出容器是AnnotationConfigServletWebServerApplicationContext类。 SpringApplication.run(ServeroneApplication.class, args);…

【Git游戏】提交的技巧

修改历史的提交 rebase 通过git rebase -i 将要修改的提交提到最前端&#xff0c; 然后修改&#xff0c;再通过git commit --amend提交该记录&#xff0c;最后通过git rebase -i 在替换会原始的位置 &#xff08;该过程中有可能会产生rebase confict&#xff09; cherry-pick …

sql数据库怎么备份,sql 实时备份

在当今互联网时代&#xff0c;数据已经成为企业的核心资产。然而&#xff0c;数据的安全性和完整性面临硬件问题、软件故障、人工操作错误等各种威胁。为了保证数据的安全&#xff0c;实时备份已经成为公司必须采取的重要措施之一。下面我们就重点介绍SQL实时备份的重要实施方法…

Leetcode.73矩阵置零

给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法 class Solution {public void setZeroes(int[][] matrix) {int m matrix.length, n matrix[0].length;boolean[] row new boolean[m];boolean[] col…

CAD哪个版本最好用?学习一下CAD版本转换方法

CAD即计算机辅助设计&#xff0c;是一个制图软件&#xff0c;用于绘制建筑、机械、电子等领域的图纸。CAD文件通常被称为“图纸”或“工程图”。 CAD文件通常在以下方面使用&#xff1a; 1. 建筑&#xff1a;建筑师使用CAD文件来创建建筑物的平面图、立体图和剖面图。 2. 机…

SpringBoot-1-Spring Boot实战:快速搭建你的第一个应用,以及了解原理

SpringBoot-1-Spring Boot实战&#xff1a;快速搭建你的第一个应用&#xff0c;以及了解原理 今日内容 SpringBootWeb入门 前言 我们在之前介绍Spring的时候&#xff0c;已经说过Spring官方(Spring官方)提供很多开源项目&#xff0c;点击projects&#xff0c;看到spring家族…

5.6.webrtc三大线程

那今天呢&#xff1f;我们来介绍一下web rtc的三大线程&#xff0c;那为什么要介绍这三大线程呢&#xff1f;最关键的原因在于web rtc的所有其他线程都是由这三大线程所创建的。那当我们将这三个线程理解清楚之后呢&#xff1f;我们就知道其他线程与它们之间是怎样关系&#xf…