記錄一下今天在工作時候遇到的一個問題,在前台錄入數據的時候,可能會將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數據看一下是否更新成功: