当前位置: 首页 > news >正文

【重学 MySQL】五十八、文本字符串(包括 enum set)类型

【重学 MySQL】五十八、文本字符串(包括 enum set)类型

  • CHAR 和 VARCHAR
  • TEXT 系列
  • ENUM
  • SET
  • 示例
  • 注意事项

在这里插入图片描述
在 MySQL 中,文本字符串类型用于存储字符数据。这些类型包括 CHARVARCHARTEXT 系列(如 TINYTEXTTEXTMEDIUMTEXTLONGTEXT)、ENUMSET。每种类型都有其特定的用途和存储特性。

CHAR 和 VARCHAR

  • CHAR(n):

    • 固定长度字符类型。
    • 如果存储的字符串长度小于 n,则会在右侧填充空格以达到长度 n
    • 适用于存储长度几乎相同的字符串,如国家代码、邮政编码等。
    • 存储空间是固定的,不依赖于实际存储的字符串长度。
  • VARCHAR(n):

    • 可变长度字符类型。
    • 实际存储空间是字符串长度加上 1 或 2 个字节(用于存储字符串长度)。
    • 适用于存储长度变化较大的字符串,如人名、电子邮件地址等。
    • 最大长度为 65,535 字节(实际最大长度取决于字符集和最大行大小)。

哪些情况使用 CHAR 或 VARCHAR 更好

类型特点空间上时间上适用场景
CHAR(M)固定长度浪费存储空间效率高存储不大,速度要求高
VARCHAR(M)可变长度节省存储空间效率低非CHAR的情况
  • 情况1:存储很短的信息。比如门牌号码101,201……这样很短的信息应该用char,因为varchar还要占个byte用于存储信息长度,本来打算节约存储的,结果得不偿失。
  • 情况2:固定长度的。比如使用uuid作为主键,那用char应该更合适。因为他固定长度,varchar动态根据长度的特性就消失了,而且还要占个长度信息。
  • 情况3:十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char来说是不需要的。
  • 情况4:具体存储引擎中的情况:
    • MyISAM 数据存储引擎和数据列:MyISAM数据表,最好使用固定长度(CHAR)的数据列代替可变长度(VARCHAR)的数据列。这样使得整个表静态化,从而使数据检索更快,用空间换时间。
    • MEMORY 存储引擎和数据列:MEMORY数据表目前都使用固定长度的数据行存储,因此无论使用CHAR或VARCHAR列都没有关系,两者都是作为CHAR类型处理的。
    • InnoDB存储引擎,建议使用VARCHAR类型。因为对于InnoDB数据表,内部的行存储格式并没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),而且主要影响性能的因素是数据行使用的存储总量,由于char平均占用的空间多于varchar,所以除了简短并且固定长度的,其他考虑varchar。这样节省空间,对磁盘I/O和数据存储总量比较好。

TEXT 系列

  • TINYTEXT:

    • 最大长度为 255 字节。
  • TEXT:

    • 最大长度为 65,535 字节(约 64 KB)。
  • MEDIUMTEXT:

    • 最大长度为 16,777,215 字节(约 16 MB)。
  • LONGTEXT:

    • 最大长度为 4,294,967,295 字节(约 4 GB)。
  • 特点:

    • 适用于存储大量文本数据,如文章、评论等。
    • 存储和检索速度通常比 CHARVARCHAR 慢。

ENUM

  • ENUM(‘value1’, ‘value2’, …, ‘valueN’):
    • 枚举类型,允许存储一个预定义集合中的一个值。
    • 枚举值在内部以整数存储,但显示时以字符串形式呈现。
    • 适用于存储具有固定选项集合的字段,如性别(‘男’, ‘女’)、状态(‘启用’, ‘禁用’)等。
    • 枚举值在定义时必须是字符串常量,且区分大小写。

SET

  • SET(‘value1’, ‘value2’, …, ‘valueN’):
    • 集合类型,允许存储一个预定义集合中的一个或多个值(以逗号分隔)。
    • 类似于 ENUM,但允许存储多个值。
    • 适用于存储具有多个选项的字段,如兴趣爱好(‘阅读’, ‘旅行’, ‘运动’)等。
    • 集合值在内部以整数存储,但显示时以字符串形式呈现。
    • 每个集合成员在定义时必须是字符串常量,且区分大小写。

示例

CREATE TABLE example (id INT AUTO_INCREMENT PRIMARY KEY,fixed_char CHAR(10),variable_char VARCHAR(255),short_text TINYTEXT,long_description TEXT,gender ENUM('Male', 'Female', 'Other'),hobbies SET('Reading', 'Traveling', 'Sports', 'Cooking')
);INSERT INTO example (fixed_char, variable_char, short_text, long_description, gender, hobbies)
VALUES ('ABC     ', 'Variable Length String', 'Short Text', 'This is a long description.', 'Male', 'Reading,Sports');

注意事项

  1. 字符集和排序规则

    • 字符类型字段可以指定字符集和排序规则(collation),以支持多语言存储和比较。
    • 常用的字符集包括 utf8utf8mb4latin1 等。
  2. 存储和性能

    • CHARVARCHAR 类型的字段在存储和检索时通常比 TEXT 类型的字段更快。
    • 对于大量文本数据,使用 TEXT 类型字段更为合适。
  3. 索引

    • CHARVARCHARTEXT 字段都可以创建索引,但 TEXT 字段的索引有一些限制(如前缀索引)。
    • ENUMSET 字段也可以创建索引,且索引效率通常较高。

通过了解这些文本字符串类型及其特性,可以更好地设计数据库表结构,以满足不同应用场景的需求。


http://www.mrgr.cn/news/44238.html

相关文章:

  • 如 有 任 何 问 题 ,请 及 时 联 系 我 们 反 馈 !
  • 一个值得关注的3D生成新算法:速度和图像生成平齐,能生成合理的展开贴图和高质量mesh
  • 19年408数据结构
  • 【Blender Python】3.使用For循环和列表批量创建立方体
  • 重磅来袭!CMSIS-DAP 脱机烧录器 EasyFlasher 发布~
  • STL-优先级队列使用总结
  • 10.6字符驱动设备
  • 力扣之1322.广告效果
  • MySQL 数据库的备份与恢复
  • 用多了编程工具,还是Editplus3最贴心
  • 4款专业电脑数据恢复软件,帮你保障数据安全。
  • 网络层常用互联网协议
  • rk3566开发之rknn npu 部署
  • 男单新老对决:林诗栋VS马龙,巅峰之战
  • golang gin入门
  • 新个性化时尚解决方案!Prompt2Fashion:自动生成多风格、类型时尚图像数据集。
  • 系统设计,如何设计一个秒杀功能
  • Vite多环境配置与打包:
  • VAD 论文学习
  • C语言---链表