mysql tidb like查询有换行符内容问题解决
问题解决记录
文章目录
- 问题解决记录
- 前言
- 记录一次使用mysql、tidb存储带有换行符内容的模糊查询。
- 一、问题现象
- 二、使用步骤
- 1.执行模糊查询语句
- 2.问题解决
- 2.1 mysql解决办法
- 2.2 tidb解决办法
- 总结
前言
记录一次使用mysql、tidb存储带有换行符内容的模糊查询。
一、问题现象
最近需要做一个需求,mysql的版本号为8.0,tidb版本号为8.0以上。数据库表的字段是text类型,需要存储的内容含有换行符引起的问题。下面我先建数据库重现下问题。
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.执行模糊查询语句
select *from test1 where name like concat('%','123\n','%');

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

2.问题解决
2.1 mysql解决办法
java代码如下(示例):
public static void main(String[] args) {// 例如输入是input 需要使用正则重新替换后再进行模糊查询String input ="xkjklfjl\njkjk\n";input = input.replaceAll("\n","\r\n");}
然后再进行查询语句如下即可查出数据。
like concat('%',input,'%');
2.2 tidb解决办法
tidb直接让前端如果校验到用户有换行,替换成\n
然后执行查询语句如下
然后再进行查询即可查出数据。
like concat('%',input,'%');
替换查询即可
总结
这里我只距离了mysql的存储方式,经过验证,mysql对于换行符的存储是 \r\n如果要模糊查询这些内容,需要替换成\r\n。如果是tidb就不用,直接是\n查询即可查出内容,感兴趣的朋友可以试试tidb的查询,这里就不举例了。
