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

这篇具有很好参考价值的文章主要介绍了【⑭MySQL | 数据类型(二)】字符串 | 二进制类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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


【⑭MySQL | 数据类型(二)】字符串 | 二进制类型,# MySQL,mysql,android,数据库

5 字符串类型

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

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

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

CHAR 和 VARCHAR 类型

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

类型 特点 长度 长度范围 占用存储空间
CHAR(M) 固定长度 M 0<=M<=255 M个字节
VARCHAR(M) 可变长度 M 0<=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类型只允许从成员中选取单个值,不能一次选取多个值。如果创建的成员中有空格,尾部的空格将自动被删除。

类型 长度范围 占用存储空间
ENUM 1<=L<=65535 1或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<=8 1个字节
9<=L<=16 2个字节
17<=L<=24 3个字节
25<=L<=32 4个字节
33<=L<=64 8个字节
  • 与 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) 非常小的BLOB L+1 字节,在此,L<2^8
BLOB (M) 小 BLOB L+2 字节,在此,L<2^16
MEDIUMBLOB (M) 中等大小的BLOB L+3 字节,在此,L<2^24
LONGBLOB (M) 非常大的BLOB L+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视图的分享文章来源地址https://www.toymoban.com/news/detail-671494.html

到了这里,关于【⑭MySQL | 数据类型(二)】字符串 | 二进制类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Golang】十六进制字符串转二进制字符串

    在计算机科学中,我们经常需要在不同进制的数字之间进行转换。Go语言提供了一系列的标准库来方便我们进行这些进制转换。本文将介绍如何使用Go语言将十六进制字符串转换为二进制字符串。 首先,我们定义一个函数 hexToBinary 用于执行这个转换。该函数接受一个十六进制

    2024年02月02日
    浏览(50)
  • Python字符串与二进制字符串之间的转换

    字符串:可以包含任意字符 二进制字符串:转换结果的长度为8的倍数 涉及的内容: 字符串与bytes类型的互相转换 bytes类转与 list 列表的互相转换 bin函数的使用 int函数的使用 步骤: 将字符串转成bytes类型 将bytes类型转成list类型(元素为int型) 将list的每个元素转成二进制字

    2024年02月13日
    浏览(47)
  • 【Golang】二进制字符串转换为数字

     在本文中,我们将探讨如何使用 Go 语言将十六进制字符串转换为二进制字符串,将不定长整型补码字符串转换为数字,以及如何将 IEEE754 标准的单精度(32位)和双精度(64位)浮点数字符串转换为数字。最后,我们将讨论如何将布尔类型的二进制字符串转换为布尔值。 这

    2024年01月16日
    浏览(58)
  • [ERR] [22001] [Microsoft][SQL Server Native Client 10.0][SQL Server]将截断字符串或二进制数据

    使用Navicat导入.csv SQL Server导入.csv文件时报错,但是这个错误不知道具体是哪里的错,然后使用DBeaver导入,提示如下错误 根据报错信息可以看到 Can\\\'t parse numeric value [NULL] using formatter ,不能解析NULL为numeric的值,到.csv文件中查看列值 可以看到列中有NULL值 既然报的是 Can\\\'t pa

    2024年02月12日
    浏览(36)
  • 【Golang】补码二进制字符串转整型

     在计算机科学中,原码、反码和补码是用来表示有符号整数的三种不同的二进制编码方式。下面将详细解释每一种编码方式的特点和用途。 原码  原码是最直观的有符号数表示方法。在原码表示法中,最高位(符号位)用来表示数的正负,0表示正数,1表示负数。正数的原

    2024年01月21日
    浏览(70)
  • SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等)

    步骤 选择菜单栏中的“工具”-“选项”,在选项对话框左栏中找到“设计器”,在设计器右边取消勾选“阻止保存要求重新创建表的更改”即可。 图例 注意 设计表时,尽量一次性设计成功,避免使用alter修改表,修改起来有各种约束,不容易修改。 解决: 你设置的数据类型

    2024年02月03日
    浏览(42)
  • java案例5-4 字符串转换为二进制

    本例要求编写一个程序,从键盘录入一个字符串,将字符串转换为二进制数。在转换时,将字符串中的每个字符单独转换为一个二进制数,将所有二进制数连接起来进行输出。 案例在实现时,要求使用Math类、String类以及Scanner等常见Java API的常用方法. 2.运行结果 学会分析“十

    2024年02月09日
    浏览(62)
  • LeetCode_字符串_简单_67.二进制求和

    给你两个二进制字符串 a 和 b,以二进制字符串的形式返回它们的和。 示例 1: 输入:a = “11”, b = “1” 输出:“100” 示例 2: 输入:a = “1010”, b = “1011” 输出:“10101” 提示: 1 = a.length, b.length = 10 4 a 和 b 仅由字符 ‘0’ 或 ‘1’ 组成 字符串如果不是 “0” ,就不含前

    2024年02月09日
    浏览(44)
  • 2023-06-14 LeetCode每日一题(二进制字符串前缀一致的次数)

    点击跳转到题目位置 给你一个长度为 n 、下标从 1 开始的二进制字符串,所有位最开始都是 0 。我们会按步翻转该二进制字符串的所有位(即,将 0 变为 1)。 给你一个下标从 1 开始的整数数组 flips ,其中 flips[i] 表示对应下标 i 的位将会在第 i 步翻转。 二进制字符串 前缀

    2024年02月08日
    浏览(53)
  • Python每日一练(20230420) 数组逐位判断、交错字符串、二进制求和

    目录 1. 数组逐位判断  🌟 2. 交错字符串  🌟🌟 3. 二进制求和  🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 比如有以下数组: a1: 1,0,0,1,0,0,0,1 a2: 0,0,0,0,1,1,1,1 a3: 0,1,0,1,0,1,0,0 a4: 1,0,1,1,1,1,0,0 a5: ....... 抓取三个数

    2024年02月15日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包