一起聊聊MySQL中blob和text数据类型(示例详解)

本篇文章我们来看一下mysql中的blob和text数据类型,blob是一个可以存储二进制文件的容器,text类型同char、varchar 类似,都可用于存储字符串,下面我们就一起来看一下这两个数据类型的相关知识,希望对大家有帮助。

一起聊聊MySQL中blob和text数据类型(示例详解)

  1. blob 类型

blob(binary large object) 是一个可以存储二进制文件的容器,主要用于存储二进制大对象,例如可以存储图片,音视频等文件。按照可存储容量大小不同来分类,blob 类型可分为以下四种:

08.png

其中最常用的就是 blob 字段类型了,最多可存储 65KB 大小的数据,一般可用于存储图标或 logo 图片。不过数据库并不适合直接存储图片,如果有大量存储图片的需求,请使用对象存储或文件存储,数据库中可以存储图片路径来调用。

  2. text 类型

text 类型同 char、varchar 类似,都可用于存储字符串,一般情况下,遇到存储长文本字符串的需求时可以考虑使用 text 类型。按照可存储大小区分,text 类型同样可分为以下四种:

09.png

不过在日常场景中,存储字符串还是尽量用 varchar ,只有要存储长文本数据时,可以使用 text 类型。对比 varchar ,text 类型有以下特点:

text 类型无须指定长度。

Symanto Text Insights Symanto Text Insights

基于心理语言学分析的数据分析和用户洞察

Symanto Text Insights 60 查看详情 Symanto Text Insights

若数据库未启用严格的 sqlmode ,当插入的值超过 text 列的最大长度时,则该值会被截断插入并生成警告。

text 类型字段不能有默认值。

varchar 可直接创建索引,text 字段创建索引要指定前多少个字符。

text 类型检索效率比 varchar 要低。

下面我们来具体测试下 text 类型的使用方法:

# 创建测试表 字符集是 utf8mysql> show create table tb_textG*************************** 1. row ***************************       Table: tb_textCreate Table: CREATE TABLE `tb_text` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',  `a` tinytext,  `b` text,  `c` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8# 创建索引测试 发现text类型必须指定前缀长度mysql> alter table tb_text add index idx_a (a);ERROR 1170 (42000): BLOB/TEXT column 'a' used in key specification without a key lengthmysql> alter table tb_text add index idx_b (b); ERROR 1170 (42000): BLOB/TEXT column 'b' used in key specification without a key lengthmysql> alter table tb_text add index idx_c (c);Query OK, 0 rows affected (0.04 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> alter table tb_text add index idx_b (b(10));Query OK, 0 rows affected (0.06 sec)Records: 0  Duplicates: 0  Warnings: 0# 插入数据测试(repeat函数用于生成重复数据)# 正常插入mysql> insert into tb_text  (a,b,c) values (repeat('hello',3),repeat('hello',3),repeat('hello',3));Query OK, 1 row affected (0.01 sec)# 插入英文字符超标mysql> insert into tb_text  (a) values (repeat('hello',52));Query OK, 1 row affected, 1 warning (0.01 sec)mysql> show warnings;+---------+------+----------------------------------------+| Level   | Code | Message                                |+---------+------+----------------------------------------+| Warning | 1265 | Data truncated for column 'a' at row 1 |+---------+------+----------------------------------------+1 row in set (0.00 sec)# 插入中文超标mysql>  insert into tb_text  (a) values (repeat('你好',100));Query OK, 1 row affected, 1 warning (0.02 sec)mysql> show warnings;+---------+------+----------------------------------------+| Level   | Code | Message                                |+---------+------+----------------------------------------+| Warning | 1265 | Data truncated for column 'a' at row 1 |+---------+------+----------------------------------------+1 row in set (0.00 sec)# 查看数据 发现数据有所截取 tinytext 类型最多存储255字节数据mysql> select * from tb_text;+----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+| id | a | b | c |+----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+|  1 | hellohellohello | hellohellohello | hellohellohello ||  2 | hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello | NULL| NULL||  3 | 你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你| NULL| NULL|+----+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+3 rows in set (0.00 sec)

通过以上测试,我们注意到,text 类型可存储容量是以字节为单位而不是字符。例如 tinytext 最多存储 255 个字节而不是 255 个字符,在 utf8 字符集下,一个英文字母或数字占用一个字节,而一个中文汉字占用三个字节。也就是说 tinytext 最多存储 255/3=85 个汉字,text 最多存储 65535/3=21845 个汉字。而 varchar(M) 中的 M 指的是字符数,一个英文、数字、汉字都是占用一个字符,即 tinytext 可存储的大小并不比 varchar(255) 多。

总结:

本篇文章介绍了 blob 及 text 字段类型相关知识。虽然数据库规范中一般不推荐使用 blob 及 text 类型,但由于一些历史遗留问题或是某些场景下,还是会用到这两类数据类型的。这篇文章仅当做个记录了,使用到的时候可以参考下。

推荐学习:mysql视频教程

以上就是一起聊聊MySQL中blob和text数据类型(示例详解)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/285496.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月4日 18:13:16
下一篇 2025年11月4日 18:17:01

相关推荐

  • c++怎么连接MySQL数据库_c++连接MySQL数据库操作教程

    首先安装MySQL开发库并配置环境,然后使用MySQL Connector/C API编写C++程序连接数据库;通过mysql_init初始化、mysql_real_connect建立连接,mysql_query执行SQL语句,mysql_store_result获取结果集,mysql_fetch_…

    2025年12月19日
    000
  • c++怎么使用数据库连接池_c++数据库连接池使用方法

    使用C++数据库连接池可提升性能和资源利用率,通过复用连接避免频繁创建销毁的开销。推荐使用SOCI或基于MySQL Connector/C++封装连接池。示例中实现了一个线程安全的连接池类,包含连接获取与归还、初始化与释放、有效性管理等功能,结合std::mutex保证并发安全,使用时需注意连接检查…

    2025年12月19日
    000
  • c++怎么连接和操作MySQL数据库_c++ MySQL数据库连接与操作示例

    使用MySQL C API可在C++中连接和操作MySQL数据库,需安装开发库并包含mysql.h头文件。通过mysql_init初始化连接,mysql_real_connect建立连接,mysql_query执行SQL语句,mysql_store_result获取结果集,mysql_fetch_r…

    2025年12月19日
    000
  • c++如何连接MySQL数据库_c++ MySQL数据库连接方法

    使用MySQL Connector/C++连接数据库需先安装开发库,配置编译环境并链接相应库文件,然后通过X DevAPI或C API建立连接。推荐使用X DevAPI进行现代C++开发,示例代码展示了如何连接、执行查询及处理异常,也可选用经典C API实现更底层控制。 要在C++中连接MySQL数…

    2025年12月19日
    000
  • C++如何实现简易登录注册系统

    答案是文件存储因无需额外配置、使用标准库即可操作且便于理解,成为C++简易登录注册系统的首选方式。其核心在于通过fstream读写文本文件,用简单结构体存储用户信息,注册时检查用户名唯一性并追加数据,登录时逐行比对凭据,适合初学者掌握基本I/O与逻辑控制。 C++实现简易登录注册系统,通常我们会采用…

    2025年12月18日
    000
  • C++如何实现简易问卷调查程序

    答案是C++简易问卷程序通过定义问题结构、用户交互和文件存储实现,支持文本与单选题,利用枚举区分类型,结构体存储数据,fstream保存结果,可扩展为多态设计以增强灵活性和可维护性。 C++实现一个简易的%ignore_a_1%程序,核心思路其实不复杂:你需要定义好问卷的结构,比如每个问题长什么样,…

    2025年12月18日
    000
  • 工厂模式在C++中怎样应用 简单工厂与抽象工厂对比

    简单工厂通过参数决定创建何种产品,适用于产品少且变化少的场景;抽象工厂则通过接口创建相关产品族,支持扩展而不修改代码,适合复杂系统。 工厂模式在C++中主要用于解耦对象的创建与使用,提升代码的可维护性和扩展性。根据复杂度和应用场景的不同,常见的有简单工厂和抽象工厂两种形式。它们都能实现对象的动态创建…

    2025年12月18日
    000
  • C++如何实现文件操作的回滚机制 事务性文件处理设计

    c++++中实现文件操作的回滚机制,其核心在于手动构建“事务性”保障,以确保数据的一致性和完整性。1. 回滚机制的本质是通过预留恢复路径(如临时文件、日志记录等),在操作失败时将文件状态还原至修改前;2. 与数据库事务的区别在于,数据库内置acid特性支持原子性、一致性、隔离性和持久性,而文件系统无…

    2025年12月18日 好文分享
    000
  • 如何用C++编写快递管理系统 物流状态追踪和数据库基础

    高效的物流状态更新机制设计可通过消息队列实现异步处理。首先,使用消息队列(如rabbitmq或kafka)解耦状态更新服务与核心业务逻辑,在状态变化时发送消息至队列;其次,由消费者服务异步处理并批量更新数据库,以降低频繁更新对数据库的压力。 快递管理系统的核心在于追踪物流状态和高效管理数据。C++虽…

    2025年12月18日 好文分享
    000
  • C++工业自动化测试环境怎么配置 LabVIEW与C++混合编程

    c++++与labview混合编程的核心在于分工明确、高效协作,c++负责高性能计算和底层硬件控制,labview用于界面设计与系统集成;具体步骤包括搭建c++开发环境并生成dll、配置labview开发环境、设计清晰的接口、使用“调用库函数节点”调用c++ dll,并注意数据类型映射、内存管理、调…

    2025年12月18日 好文分享
    000
  • C++智慧农业物联网环境怎么搭建 LoRaWAN网关开发配置

    搭建基于c++++的智慧农业物联网环境并配置lorawan网关的核心步骤如下:1. 准备硬件,选择兼容的lorawan模块和网关,并确保网络连接;2. 配置网关软件,设置频率、服务器地址等参数;3. 使用c++开发后端服务,接收并解析数据,存入数据库并提供api;4. 可选chirpstack搭建本…

    2025年12月18日 好文分享
    000
  • 如何用C++实现桥接模式 抽象与实现分离设计方案

    c++++中桥接模式的核心优势在于解耦抽象与实现,使其能独立变化。1. 它通过将一个类中可能变动的具体操作抽离为独立的实现体系,降低类组合数量,避免“m x n”组合爆炸;2. 抽象类(如shape)包含指向实现接口的指针或引用,调用具体实现(如drawingapi),使两者互不影响;3. 适用于多…

    2025年12月18日 好文分享
    000
  • C++中如何使用类型擦除_运行时多态实现

    c++++中类型擦除是一种在运行时统一处理不同类型的技术,通过隐藏具体类型信息实现手动多态。1. 定义抽象基类作为通用接口;2. 创建模板类实现该接口并转发操作;3. 使用包装类包含模板类实例指针,提供相同方法并转发调用。示例中drawable为抽象基类,circle和square为具体类型,dra…

    2025年12月18日 好文分享
    000
  • 静态检查融合:SonarQube + Clang实现C++自动审计

    静态检查融合是通过结合sonarqube规则引擎与c++lang分析能力提升c++代码审计效果的方法。1. 安装sonarqube服务器并配置数据库;2. 安装sonarscanner并配置环境变量;3. 安装clang及相关开发工具;4. 安装并配置sonarqube cfamily插件;5. 创…

    2025年12月18日 好文分享
    000
  • 什么是C++中的数据库索引优化?

    c++++中的数据库索引优化可以通过以下步骤实现:1)选择正确的索引类型,如b-tree适合范围查询;2)维护索引,平衡读写性能;3)使用复合索引提升多列查询性能;4)通过查询优化和性能监控调整索引策略。 C++中的数据库索引优化?这是一个有趣且复杂的主题,让我们深入探讨一下。 C++虽然主要用于系…

    2025年12月18日
    000
  • C++中的ORM框架是什么?

    c++++中的orm框架是一种工具,通过对象映射到数据库表,简化数据库操作。1)orm框架通过对象操作数据库,提高开发效率和代码可维护性。2)常见框架如cppdb、odb和soci,各有特点。3)使用时需注意映射关系、查询优化和性能考虑。 C++中的ORM(对象关系映射)框架是什么?简单来说,ORM…

    2025年12月18日
    000
  • C语言网络编程中数据库连接的优化措施问答

    优化措施:使用连接池预创建数据库连接,避免连接/断开开销。优化查询语句,只查询必要字段,避免通配符或子查询。使用批处理将多个操作组合成一个请求,减少网络开销。尽量使用乐观的锁定机制,减少锁定粒度。考虑使用无服务器数据库,由供应商管理数据库,减少开销。 C语言网络编程中数据库连接的优化措施 在C语言网…

    2025年12月18日
    000
  • C++ 函数库在哪些场景下使用?

    c++++ 函数库预先定义了代码模块,可用于处理常见任务,广泛应用于:输入/输出操作字符串操作数学运算此外,还有特定领域的场景,如:图形处理网络编程数据库连接示例:使用 matplotlibcpp 函数库绘制折线图,实现了便捷的图形化展示。 C++ 函数库的应用场景 简介C++ 函数库提供了预定义的…

    2025年12月18日
    000
  • C++框架内置功能在跨平台开发中的作用

    在跨平台开发中,c++++ 框架的内置功能发挥着至关重要的作用,包括:跨平台兼容性:在多平台上稳定运行,简化移植。图形用户界面 (gui) 支持:提供跨平台的 gui 库,无需编写平台特定代码。数据库集成:支持多种数据库系统,实现数据访问和操作的跨平台性。网络通信:提供网络通信机制,用于分布式应用程…

    2025年12月18日
    000
  • C++框架中的数据处理和存储机制

    本文介绍了 c++++ 框架中处理和存储数据的关键技术:数据处理:stl 容器(vector、map、set)boost 库(额外容器和算法)eigen 库(优化矩阵和向量)数据存储:关系数据库管理系统(rdbms)(mysql、postgresql、sqlite)文档存储(mongodb、redi…

    2025年12月18日
    000

发表回复

登录后才能评论
关注微信