mysql tidb like查询有换行符内容问题解决

问题解决记录

文章目录


前言

记录一次使用mysql、tidb存储带有换行符内容的模糊查询。

一、问题现象

最近需要做一个需求,mysql的版本号为8.0,tidb版本号为8.0以上。数据库表的字段是text类型,需要存储的内容含有换行符引起的问题。下面我先建数据库重现下问题。

java 复制代码
DROP TABLE IF EXISTS `test1`;
CREATE TABLE `test1`  (
  `id` int NOT NULL,
  `name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of test1
-- ----------------------------
INSERT INTO `test1` VALUES (1, '123\r\n456\r\n78910');

现在已经插入好带换行的数据。

二、使用步骤

1.执行模糊查询语句

java 复制代码
select *from test1 where name like concat('%','123\n','%');

可以看到直接模糊查询123\n是查询不到内容的,需要把sql改成\r\n才能查询到数据。

2.问题解决

2.1 mysql解决办法

java代码如下(示例):

java 复制代码
    public static void main(String[] args) {
      // 例如输入是input 需要使用正则重新替换后再进行模糊查询
      String input ="xkjklfjl\njkjk\n";
      input = input.replaceAll("\n","\r\n");
    }
java 复制代码
然后再进行查询语句如下即可查出数据。
like concat('%',input,'%');

2.2 tidb解决办法

tidb直接让前端如果校验到用户有换行,替换成\n

然后执行查询语句如下

java 复制代码
然后再进行查询即可查出数据。
like concat('%',input,'%');

替换查询即可

总结

这里我只距离了mysql的存储方式,经过验证,mysql对于换行符的存储是 \r\n如果要模糊查询这些内容,需要替换成\r\n。如果是tidb就不用,直接是\n查询即可查出内容,感兴趣的朋友可以试试tidb的查询,这里就不举例了。

相关推荐
Elastic 中国社区官方博客1 分钟前
基于 Jina OCR v1 与 Elasticsearch 的 PDF 智能混合检索与 RAG 系统实战指南
大数据·数据库·elasticsearch·搜索引擎·ocr·jina
我不会起名字3228 分钟前
MySQL 8.0 迁移后 SQL 变慢:执行计划里 3 类被忽略的成本差异
mysql·explain·执行计划·索引下推·成本模型
楚识科技8 分钟前
信创环境下 OCR 部署实践:从麒麟系统到达梦数据库的全栈适配
数据库·ocr
飞浪纪元[FWC–FE]14 分钟前
Qt 构建排错实录:从 MSB 1009 到生成器选型
开发语言·数据库·qt
Paper数据分析-经管学术14 分钟前
1985-2026年中国低空经济专利明细数据库
数据库
RuoyiOffice14 分钟前
SpringBoot3 + openGauss:RuoYi Office 登录、流程发布与用印填报适配实战
java·数据库·spring boot·opengauss·信创
画中有画25 分钟前
时序数据库在物联网系统中的应用
数据库·物联网·时序数据库
Decay__7 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
小徐不徐说11 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
论文复现现场11 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算