企微审批中MySQL字段TEXT类型被截断的排查与修复实践
在MySQL中,`TEXT`类型字段常用于存储较大的文本数据,但在一些应用场景中,当文本内容较大时,`TEXT`类型字段可能无法满足需求,导致数据截断或插入失败。为了避免这种问题,了解不同文本类型(如`TEXT`、`MEDIUMTEXT`、`LONGTEXT`)的适用范围,并根据实际需求选择合适的字段类型至关重要。本文将通过排查和修复过程,说明如何将字段类型从`TEXT`修改为`MEDIUMTEXT`,并介绍MySQL中的几种文本类型常识。

## 一、MySQL中不同文本类型的常识
如果文本数据在 64 KB 以内,使用 TEXT。
如果文本数据在 16 MB 以内,使用 MEDIUMTEXT。
如果文本数据可能超过 16 MB,使用 LONGTEXT。
MySQL提供了多种文本数据类型,主要分为三种:`TEXT`、`MEDIUMTEXT` 和 `LONGTEXT`。每种类型的大小限制不同,因此了解它们的适用场景和数据存储的最大限制非常重要。


### 1. `TEXT`类型
- 最大长度:65,535字节(约64KB)
- 用途:适用于存储较小的文本数据,文本大小在64KB以内时使用`TEXT`类型。
- 注意事项:如果文本数据较大,使用`TEXT`可能会导致存储失败或数据截断。
### 2. `MEDIUMTEXT`类型
- 最大长度:16,777,215字节(约16MB)
- 用途:适用于存储中等大小的文本数据,文本数据大小在64KB至16MB之间时使用`MEDIUMTEXT`类型。
- 注意事项:`MEDIUMTEXT`类型可以满足更大文本数据的存储需求,避免了`TEXT`类型的限制。
### 3. `LONGTEXT`类型
- 最大长度:4,294,967,295字节(约4GB)
- 用途:适用于存储非常大的文本数据,文本数据可能超过16MB时使用`LONGTEXT`类型。
- 注意事项:`LONGTEXT`适用于极大的文本数据,但会占用更多的存储空间和可能影响性能。
因此,根据应用场景选择合适的字段类型是非常关键的。如果字段类型为`TEXT`,但数据超过了64KB,就会出现截断问题。为了避免这种情况,通常会将字段类型从`TEXT`调整为`MEDIUMTEXT`或`LONGTEXT`。
## 二、TEXT字段被截断的排查过程

### 1. 确认字段类型
首先,我们需要确认表中实际的字段类型。执行以下查询语句来查看字段的类型:
```sql
DESCRIBE table_name;
```
这将显示表结构,包括每个字段的名称、数据类型及其它属性。如果发现字段类型是`TEXT`,并且预计该字段的文本数据将超过64KB,那么就需要考虑将其类型更改为`MEDIUMTEXT`或`LONGTEXT`。
### 2. 检查数据是否超过限制
如果存储的数据过大,超出了`TEXT`的64KB限制,会发生数据截断。可以尝试插入或更新一条包含大量文本的数据,看看是否会抛出错误或导致截断。
例如,尝试插入一条超过64KB的记录:
```sql
INSERT INTO table_name (column_name) VALUES ('<long_text>');
```
如果遇到数据丢失或报错信息(如:`Data too long for column`),说明文本数据超出了`TEXT`类型的存储限制。

### 3. 检查MySQL配置参数
在某些情况下,MySQL的配置参数`max_allowed_packet`会影响大数据的存储。如果该值设置得太小,可能会导致即使字段类型适合,也无法成功存储大文本数据。
检查当前的`max_allowed_packet`配置:
```sql
SHOW VARIABLES LIKE 'max_allowed_packet';
```
如果该值较小,可以通过修改`my.cnf`文件中的`max_allowed_packet`来增加最大数据包大小。例如:
```ini
[mysqld]
max_allowed_packet=64M
```
修改后需要重启MySQL服务。
### 4. 检查字符集
字符集配置不一致时,也可能导致存储大文本数据时出现问题。尤其是涉及多字节字符(如`utf8mb4`)时,需要确保字符集与应用程序一致。
可以检查数据库、表和字段的字符集:
```sql
SHOW CREATE TABLE table_name;
SHOW FULL COLUMNS FROM table_name;
```
如果字符集不一致,可以通过以下命令修改:
```sql
-- 修改字段字符集
ALTER TABLE table_name MODIFY column_name MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
## 三、修复方案:将字段从TEXT改为MEDIUMTEXT
临时方案:测试环境,搞一条超限的数据,排查完整,正式环境查询表数据量小于100万,直接修改字段大小,再刷下数据,后期再考虑其他优化方案
如果确实是字段类型限制了数据存储,导致数据截断,可以考虑将字段类型从`TEXT`修改为`MEDIUMTEXT`。`MEDIUMTEXT`类型支持存储最大16MB的文本数据,可以满足大多数业务需求。
### 1. 修改字段类型
执行以下SQL命令,将字段类型从`TEXT`修改为`MEDIUMTEXT`:
```sql
ALTER TABLE table_name MODIFY column_name MEDIUMTEXT;
```
### 2. 检查修改后的效果
修改字段类型后,可以重新插入或更新大文本数据,确保不再发生数据截断问题。通过执行插入操作:
```sql
INSERT INTO table_name (column_name) VALUES ('<large_text>');
```
如果数据插入成功,说明问题已经解决。
### 3. 考虑更大的字段类型(如有必要)
如果预计数据会超过16MB,可以考虑将字段类型修改为`LONGTEXT`,支持最大4GB的文本数据。执行以下SQL命令:
```sql
ALTER TABLE table_name MODIFY column_name LONGTEXT;
```
不过,通常情况下,`MEDIUMTEXT`已经足够满足大部分需求,只有在数据极大时,才需要考虑使用`LONGTEXT`。
## 四、总结
通过本文的排查与修复过程,我们了解了`TEXT`、`MEDIUMTEXT`、`LONGTEXT`三种文本类型的不同适用场景,并针对`TEXT`类型字段被截断的问题提出了解决方案。如果字段的数据超过了`TEXT`的64KB限制,应该将其类型修改为`MEDIUMTEXT`或`LONGTEXT`,以避免数据截断。
具体修复步骤包括:
1. 确认字段类型,并检查数据是否超出`TEXT`类型的限制。
2. 检查MySQL配置,确保`max_allowed_packet`足够大,避免配置限制影响大数据存储。
3. 如果需要,将字段类型从`TEXT`修改为`MEDIUMTEXT`,或者根据需要使用`LONGTEXT`。
4. 确保字符集设置一致,避免字符集不一致导致数据存储问题。
这样,便可以确保文本数据不被截断,避免潜在的业务错误。
相关文章:
企微审批中MySQL字段TEXT类型被截断的排查与修复实践
在MySQL中,TEXT类型字段常用于存储较大的文本数据,但在一些应用场景中,当文本内容较大时,TEXT类型字段可能无法满足需求,导致数据截断或插入失败。为了避免这种问题,了解不同文本类型(如TEXT、M…...
[ISP] AE 自动曝光
相机通过不同曝光参数(档位快门时间 x 感光度 x 光圈大小)控制进光量来完成恰当的曝光。 自动曝光流程大概分为三部分: 1. 测光:点测光、中心测光、全局测光等;通过调整曝光档位使sensor曝光在合理的阈值内࿰…...
小程序画带圆角的圆形进度条
老的API <canvas id"{{canvasId}}" canvas-id"{{canvasId}}" style"opacity: 0;" class"canvas"/> startDraw() {const { canvasId } this.dataconst query this.createSelectorQuery()query.select(#${canvasId}).bounding…...
16. LangChain实战项目2——易速鲜花内部问答系统
需求简介 易束鲜花企业内部知识库如下: 本实战项目设计一个内部问答系统,基于这些内部知识,回答内部员工的提问。 在前面课程的基础上,需要安装的依赖包如下: pip install docx2txt pip install qdrant-client pip i…...
代码的解读——自用
代码来自:https://github.com/ChuHan89/WSSS-Tissue?tabreadme-ov-file 借助了一些人工智能 run_pipeline.sh 功能总结 该脚本用于执行一个 弱监督语义分割(WSSS) 的完整流程,包含三个阶段: Stage1:训…...
蓝桥杯试题:DFS回溯
一、题目要求 输入一个数组n,输出1到n的全排列 二、代码展示 import java.util.*;public class ikun {static List<List<Integer>> list new ArrayList<>();public static void main(String[] args) { Scanner sc new Scanner(System.in);…...
FPGA开发,使用Deepseek V3还是R1(8):FPGA的全流程(简略版)
以下都是Deepseek生成的答案 FPGA开发,使用Deepseek V3还是R1(1):应用场景 FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别 FPGA开发,使用Deepseek V3还是R1&#x…...
一个py文件搞定mysql查询+Json转换+表数据提取+根据数据条件生成excel文件+打包运行一条龙
import os import argparse import pymssql import json import pandas as pd from datetime import datetime from pandas.io.formats.excel import ExcelFormatter import openpyxl# 投注类型映射字典 BET_MAPPING {1: WIN, 2: PLA, 3: QIN, 4: QPL,5: DBL, 6: TCE, 7: QTT,…...
微服务学习(1):RabbitMQ的安装与简单应用
目录 RabbitMQ是什么 为什么要使用RabbitMQ RabbitMQ的安装 RabbitMQ架构及其对应概念 队列的主要作用 交换机的主要作用 RabbitMQ的应用 通过控制面板操作(实现收发消息) RabbitMQ是什么 RabbitMQ是一个开源的消息队列软件(消息代理…...
【RAG】Embeding 和 Rerank学习笔记
Q: 现在主流Embeding模型架构 在RAG(Retrieval-Augmented Generation)系统中,嵌入模型(Embedding Model) 是检索阶段的核心组件,负责将查询(Query)和文档(Document&#…...
【Delphi】如何解决使用webView2时主界面置顶,而导致网页选择文件对话框被覆盖问题
一、问题描述: 在Delphi 中使用WebView2控件,如果预先把主界面置顶(Self.FormStyle : fsStayOnTop;),此时,如果在Web页面中有使用(<input type"file" id"fileInput" acc…...
【量化金融自学笔记】--开篇.基本术语及学习路径建议
在当今这个信息爆炸的时代,金融领域正经历着一场前所未有的变革。传统的金融分析方法逐渐被更加科学、精准的量化技术所取代。量化金融,这个曾经高不可攀的领域,如今正逐渐走进大众的视野。它将数学、统计学、计算机科学与金融学深度融合&…...
iOS 使用消息转发机制实现多代理功能
在iOS开发中,我们有时候会用到多代理功能,比如我们列表的埋点事件,需要我们在列表的某个特定的时机进行埋点上报,我们当然可以用最常见的做法,就是设置代理实现代理方法,然后在对应的代理方法里面进行上报&…...
16.3 LangChain Runnable 协议精要:构建高效大模型应用的核心基石
LangChain Runnable 协议精要:构建高效大模型应用的核心基石 关键词:LCEL Runnable 协议、LangChain 链式开发、自定义组件集成、流式处理优化、生产级应用设计 1. Runnable 协议设计哲学与核心接口 1.1 协议定义与类结构 #mermaid-svg-PlmvpSDrEUrUGv2p {font-family:&quo…...
Starrocks入门(二)
1、背景:考虑到Starrocks入门这篇文章,安装的是3.0.1版本的SR,参考:Starrocks入门-CSDN博客 但是官网的文档,没有对应3.0.x版本的资料,却有3.2或者3.3或者3.4或者3.1或者2.5版本的资料,不要用较…...
【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…...
Electron一小时快速上手
1. 什么是 Electron? Electron 是一个跨平台桌面应用开发框架,开发者可以使用 HTML、CSS、JavaScript 等 Web 技术来构建桌面应用程序。它的本质是结合了 Chromium 和 Node.js,现在广泛用于桌面应用程序开发。例如,以下桌面应用都使用了 El…...
算法004——盛最多水的容器
力扣——盛最多水的容器点击即可跳转 当我们选择1号线和8号线时,下标为 1 和 8 形成容器的容积的高度是由 较矮的决定的,即下标为 8 的位置; 而宽度则是 1到8 之间的距离,为 8-17,此时容器的容积为 7 * 7 49。 当我…...
Java Web-Filter
Filter 在 Java Web 开发中,Filter(过滤器)是 Servlet 规范中的一个重要组件,它可以对客户端与服务器之间的请求和响应进行预处理和后处理。以下从多个方面详细介绍 Java Web 中的 Filter: 一、概念和作用 概念&…...
LeetCode 热题100 438. 找到字符串中所有字母异位词
LeetCode 热题100 | 438. 找到字符串中所有字母异位词 大家好,今天我们来解决一道经典的算法题——找到字符串中所有字母异位词。这道题在 LeetCode 上被标记为中等难度,要求我们在字符串 s 中找到所有是 p 的异位词的子串,并返回这些子串的…...
DeepSeek-R1训练时采用的GRPO算法数学原理及算法过程浅析
先来简单看下PPO和GRPO的区别: PPO:通过奖励和一个“评判者”模型(critic 模型)评估每个行为的“好坏”(价值),然后小步调整策略,确保改进稳定。 GRPO:通过让模型自己生…...
Qt基于信号量QSemaphore实现的生产者消费者模型
在 Qt 中,信号量(QSemaphore)是一种用于控制对共享资源访问的同步工具。它允许一定数量的线程同时访问共享资源,适合用于生产者-消费者模型。 代码实现 #include <QCoreApplication> #include <QThread> #include &…...
七星棋牌 6 端 200 子游戏全开源修复版源码(乐豆 + 防沉迷 + 比赛场 + 控制)
七星棋牌源码 是一款运营级的棋牌产品,覆盖 湖南、湖北、山西、江苏、贵州 等 6 大省区,支持 安卓、iOS 双端,并且 全开源。这个版本是 修复优化后的二开版本,新增了 乐豆系统、比赛场模式、防沉迷机制、AI 智能控制 等功能&#…...
CSDN博客导出设置介绍
在CSDN编辑博客时,如果想导出保存到本地,可以选择导出为Markdown或者HTML格式。其中导出为HTML时有这几种选项:jekyll site,plain html,plain text,styled html,styled html with toc。分别是什…...
_ 为什么在python中可以当变量名
在 Python 中,_(下划线)是一个有效的变量名,这主要源于 Python 的命名规则和一些特殊的使用场景。以下是为什么 _ 可以作为变量名的原因和常见用途: --- ### 1. **Python 的命名规则** Python 允许使用字母ÿ…...
使用haproxy实现MySQL服务器负载均衡
一、环境准备 主机名IP地址备注openEuler-1192.168.121.11mysql-server-1openEuler-2192.168.121.12mysql-server-2openEuler-3192.168.121.13clientRocky-1192.168.121.51haproxy 二、mysql-server配置 [rootopenEuler-1 ~]# yum install -y mariadb-server [rootopenEuler…...
音视频-WAV格式
1. WAV格式说明: 2. 格式说明: chunkId:通常是 “RIFF” 四个字节,用于标识文件类型。(wav文件格式表示)chunkSize:表示整个文件除了chunkId和chunkSize这 8 个字节外的其余部分的大小。Forma…...
apload-lab打靶场
1.提示显示所以关闭js 上传<?php phpinfo(); ?>的png形式 抓包,将png改为php 然后放包上传成功 2.提示说检查数据类型 抓包 将数据类型改成 image/jpeg 上传成功 3.提示 可以用phtml,php5,php3 4.先上传.htaccess文件࿰…...
通用查询类接口数据更新的另类实现
文章目录 一、简要概述二、java工程实现1. 定义main方法2. 测试运行3. 源码放送 一、简要概述 我们在通用查询类接口开发的另类思路中,关于接口数据的更新,提出了两种方案: 文件监听 #mermaid-svg-oJQjD6jQ8T19XlHA {font-family:"tre…...
sentinel详细使用教学
sentinel源码地址: https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D sentinel官方文档: https://sentinelguard.io/zh-cn/docs/introduction.html Sprong Cloud alibaba Sentinel文档【小例子】 : https://github.com/alibaba/spring-cl…...
