MySQL:去除\n字符串

记录一下今天在工作时候遇到的一个问题,在前台录入数据的时候,可能会将Excel中换行符复制到了前台页面中,然后保存到了数据库中。

我这里贴上一点sql文件,仅供测试使用:

DROP TABLE IF EXISTS `ucas_test`;
CREATE TABLE `ucas_test`  (
  `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `material_macode` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '材料序号',
  `material_maname` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '材料名称',
  `protype_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '工程类型id',
  `mtype_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '材料类型id',
  `whrid` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '维护人id',
  `whr` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '维护人',
  `whsj` datetime(0) NULL DEFAULT NULL COMMENT '维护时间',
  `mtype_fid` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '材料类别fid',
  `material_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '材料类型',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8;

INSERT INTO `ucas_test` VALUES ('MATERIAL202101231522200094', 'B-1-07-01', '工程地质勘查报告\n\n', 'PROTYPE202011301357520003', 'MTYPE202101231039480013', 'YH202103161026260030', '临时测试', '2021-05-07 08:32:11', 'MTYPE202101230931080002', '文字(张)');
INSERT INTO `ucas_test` VALUES ('MATERIAL202101231523550095', 'B-1-07-02', '水文地质勘查报告\n', 'PROTYPE202011301357520003', 'MTYPE202101231039480013', 'YH202103161026260030', '临时测试', '2021-05-07 08:32:22', 'MTYPE202101230931080002', '文字(张)');
INSERT INTO `ucas_test` VALUES ('MATERIAL202101231524220096', 'B-1-08-01', '勘察承包合同\n\n', 'PROTYPE202011301357520003', 'MTYPE202101231040280014', 'YH202103161026260030', '临时测试', '2021-05-07 08:32:34', 'MTYPE202101230931080002', '文字(张)');
INSERT INTO `ucas_test` VALUES ('MATERIAL202101231524530097', 'B-1-08-02', '设计承包合同\n', 'PROTYPE202011301357520003', 'MTYPE202101231040280014', 'YH202103161026260030', '临时测试', '2021-05-07 08:32:45', 'MTYPE202101230931080002', '文字(张)');

我们使用Notepad2软件打开SQL表格,就可以看到\n换行符了、

解决办法:

说明:mysql中

char(9), char(10), char(13)分别是:
char(9) 表示水平制表符 (tab键 \t)
char(10) 表示换行键 (\n)
char(13) 表示回车键 (\r)

第一步:必要:先来学习一下两个MySQL中函数

concat(str1,str2,…) 

使用方法:
concat(str1,str2,…)  

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

select concat('z','zx');

replace(object,search,replace) 

object:要进行替换的列
search:要替换的数据
replace:替换成什么数据
意思:把object中出现search的全部替换为replace

第二步、进行更新数据

1.先查到要更改的数据

-- 第一种方式
SELECT
 * 
FROM
 ucas_test 
WHERE
 ucas_test.material_maname LIKE CONCAT( '%', CHAR ( 10 ), '%' );
 
-- 第二种方式
SELECT
 * 
FROM
 ucas_test 
WHERE
 ucas_test.material_maname LIKE '%\\\n%';

2、更新数据

-- 更新换行符为空串第一种方式
UPDATE 
    ucas_test 
SET 
    ucas_test.material_maname = REPLACE ( ucas_test.material_maname, CHAR ( 10 ), '' ) 
WHERE
    ucas_test.material_maname 
LIKE 
    '%\\\n%';

-- 更新换行符为空串第二种方式
UPDATE 
    ucas_test 
SET 
    ucas_test.material_maname
    = 
    REPLACE ( REPLACE ( ucas_material.material_maname, CHAR ( 10 ), '' ), CHAR ( 13 ), '' ) 
WHERE
    ucas_test.material_maname 
LIKE 
    concat( '%', CHAR ( 10 ), '%' );

更新成功:

 再导出SQL数据看一下是否更新成功:

posted @ 2021-05-19 16:49  Java小白的搬砖路  阅读(1192)  评论(0编辑  收藏  举报