mysql中 text类型字段的值查询不出来

本文分享了一位开发者在公司项目中遇到的MySQL TEXT类型字段无法查询的问题,并提供了使用selectByExampleWithBLOBs方法的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在公司进行开发项目时,发现mysql中text类型的字段查询不出来。翻来倒去不知道是啥个原因。最终个人经过苦思冥想,翻阅百度也没有明确指出问题,还是配合着自己的绝顶思维模式终于找出问题关键所在。
下面发出一段代码,切记如果发现你们公司项目有该代码存在,一定是自动生成的。包括实体类 mapper 是不是很方便啊!!

 <sql id="Base_Column_List" >
*************
  </sql>
  <sql id="Blob_Column_List" >
*************
  </sql>
  <sql id="Example_Where_Clause" >
    <where >
      <foreach collection="oredCriteria" item="criteria" separator="or" >
        <if test="criteria.valid" >
          <trim prefix="(" suffix=")" prefixOverrides="and" >
            <foreach collection="criteria.criteria" item="criterion" >
              <choose >
                <when test="criterion.noValue" >
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue" >
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue" >
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue" >
                  and ${criterion.condition}
                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>
  <sql id="Update_By_Example_Where_Clause" >
    <where >
      <foreach collection="example.oredCriteria" item="criteria" separator="or" >
        <if test="criteria.valid" >
          <trim prefix="(" suffix=")" prefixOverrides="and" >
            <foreach collection="criteria.criteria" item="criterion" >
              <choose >
                <when test="criterion.noValue" >
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue" >
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue" >
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue" >
                  and ${criterion.condition}
                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>

在这个时候,我们要知道,在查询的时候,就不应该使用selectByExample这个方法了,要使用selectByExampleWithBLOBs这个方法,才能将text类型的字段查询出来。

如果这篇文章有帮助到大家,在下定感到万分荣幸。如果没有,在下定当多加努力。谢谢大家!!

这辈子坚持与不坚持都不可怕,怕的是一直走在独自思考的路上!!!
在这里插入图片描述

欢迎加入技术群聊!!

### 修改 LongTextText 类型MySQL 中,`LONGTEXT` 和 `TEXT` 都属于大对象(LOB)类型,但是它们之间存在存储空间上的差异。为了将 `LONGTEXT` 转换为 `TEXT` 并可能截断过长的内容以适应新的数据类型限制,可以采取以下方法: #### 方法一:直接修改字段定义 可以直接通过 `ALTER TABLE ... MODIFY COLUMN` 命令来改变列的数据类型。需要注意的是,在执行此操作之前应该备份原始表格中的重要资料。 ```sql ALTER TABLE table_name MODIFY column_name TEXT; ``` 这种方法适用于目标表内所有记录的长度都小于等于 `TEXT` 所能容纳的最大尺寸 (65,535 字节),并且需要显式地处理超出部分的数据[^3]。 #### 方法二:先创建临时副本再迁移数据 对于那些含有超过 `TEXT` 容量限制的大体积文本内容的情况,建议采用更谨慎的方式——即先复制原表结构建立一个新的中间过渡表,并在此过程中对每条记录做适当裁剪后再导入回源表中替换原有字段。 1. 创建带有合适大小的新字段的辅助表; 2. 使用 INSERT INTO SELECT 结合 SUBSTRING() 函数提取所需长度的部分存入新表; 3. 删除旧版字段并重命名新版字段至预期名称完成转换过程。 具体实现如下所示: ```sql CREATE TEMPORARY TABLE temp_table AS SELECT id, /* other columns */, LEFT(longtext_column, 65535) as new_text_field FROM original_table; DROP TABLE IF EXISTS final_table; RENAME TABLE original_table TO backup_table, temp_table TO final_table; ``` 这里假设 `id` 是主键或其他唯一标识符以便后续关联两份数据集。同时请注意调整实际应用环境下的表名(`original_table`)以及涉及的具体字段名(`longtext_column`, `new_text_field`)。 另外得注意的一点是关于排序时使用的最大字符数配置项 `max_sort_length` 可能在某些情况下影响查询性能,默认设为 1024 字节,可根据需求调整该参数以优化特定场景下表现[^4]。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值