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数据看一下是否更新成功: