MySQL數(shù)據(jù)中很多換行符和回車(chē)符的解決方法
發(fā)現(xiàn)問(wèn)題
今天一大早客戶給我打電話:“小陳兒,昨晚我往數(shù)據(jù)庫(kù)導(dǎo)了幾十萬(wàn)條數(shù)據(jù),然后在web界面很多都搜不到,你們系統(tǒng)做的啥玩意兒???這么多BUG!得啵得啵得…”(省略2000字)又習(xí)慣性的噴了一遍我們這個(gè)項(xiàng)目做的辣雞~~
得得得,客戶隨便噴,我就當(dāng)吃了個(gè)早飯了🙂🙂🙂嗝兒~嗯,真飽;
我到公司后先測(cè)試一下客戶給我的錯(cuò)誤示例(果然搜不到),然后排查一下昨天的數(shù)據(jù)是否有問(wèn)題,發(fā)現(xiàn)昨天客戶用excel導(dǎo)入的數(shù)據(jù)中,存在很多\r\n這種換行符和回車(chē)符。
如:庫(kù)中數(shù)據(jù)為:“換行符\n換行符\n換行符”,然后在界面通過(guò)如下SQL查詢,那自然是搜不到咯!
SELECT * from `LOL` where name = '換行符換行符換行符';
換行符:CHAR(10) = "\n"
回車(chē)符: CHAR(13) = "\r"
在MySQL中,回車(chē)符、換行符都屬于char類(lèi)型,放到varchar中時(shí),在navcat等插件上是不顯示的,需要在mysql終端和navcat對(duì)比才能看出來(lái)(坑啊~)
navcat插件顯示如下:

MySQL終端顯示如下:
(回車(chē)符\r還導(dǎo)致數(shù)據(jù)結(jié)果直接返回了,只顯示了一部分,MySQL你讓我說(shuō)你啥好😰😰)
mysql> select * from `LOL`; +----+-------------------------------+-----------+-------+ | id | hero_title | hero_name | price | +----+-------------------------------+-----------+-------+ | 1 | D刀鋒之影 | 泰隆 | 6300 | | 2 | X迅捷斥候 | 提莫 | 6300 | | 8 | 換行符 換行符 換行符 | 換行符 | 450 | 回車(chē)符 | 回車(chē)符 | 450 | +----+-------------------------------+-----------+-------+ 4 rows in set (0.00 sec)
1、如何去掉換行符、回車(chē)符
如果條件允許,建議直接通過(guò)語(yǔ)句清除掉換行符和回車(chē)符,如下:
去除"hero_title"列中所有換行符 (通過(guò)以下兩種方式都可以)
-- 去除"hero_title"列中所有換行符 (通過(guò)以下兩種方式都可以) update `LOL` set hero_title = REPLACE(hero_title, '\n', ''); update `LOL` set hero_title = REPLACE(hero_title, char(10), '');
– 去除"hero_title"列中所有回車(chē)符(通過(guò)以下兩種方式都可以)
-- 去除"hero_title"列中所有回車(chē)符 update `LOL` set hero_title = REPLACE(hero_title, '\r', ''); update `LOL` set hero_title = REPLACE(hero_title, char(13), '');
2、SELECT如何忽略"換行符、回車(chē)符"進(jìn)行查詢
如果條件不允許,比如客戶“很激動(dòng)”并向你吼道:不能動(dòng)庫(kù)里的數(shù)據(jù)!…我笑了~
那怎么辦呢?可以通過(guò)修改SQL來(lái)過(guò)濾掉換行符、回車(chē)符,但一定程度上會(huì)影響查詢效率,而且要改很多代碼,你懂得。
銘記魯迅先生說(shuō)的:哪里有壓迫,哪里就得有反抗!
示例如下:
-- 忽略掉換行符查詢 SELECT * from `LOL` where REPLACE(hero_title, char(10), '') = '換行符換行符換行符'; -- 忽略掉回車(chē)符查詢 SELECT * from `LOL` where REPLACE(hero_title, char(13), '') = '回車(chē)符回車(chē)符回車(chē)符'; -- 忽略掉換行符 & 回車(chē)符查詢 SELECT * from `LOL` where REPLACE(REPLACE(hero_title, char(13), ''), char(10), '') = '回車(chē)符回車(chē)符回車(chē)符';
3、經(jīng)驗(yàn)總結(jié)
類(lèi)似的符號(hào)一般要求入庫(kù)時(shí)就清理掉,如果必須保留也建議用其他自定義標(biāo)識(shí)代替(如自創(chuàng)的唯一標(biāo)識(shí),我叫它大眼瞪小眼: o_O),后臺(tái)程序中做替換處理,免得影響到索引效率。
好了,希望這篇文章能幫到你,或許你可以mark一下,當(dāng)同事遇到該問(wèn)題時(shí),甩她臉上~
到此這篇關(guān)于MySQL數(shù)據(jù)中很多換行符和回車(chē)符的解決方法的文章就介紹到這了,更多相關(guān)MySQL換行符和回車(chē)符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用squirrel進(jìn)行sql拼接不生效問(wèn)題及解決
這篇文章主要介紹了使用squirrel進(jìn)行sql拼接不生效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
mysql -參數(shù)thread_cache_size優(yōu)化方法 小結(jié)
以下是某門(mén)戶網(wǎng)站的mysql狀態(tài)實(shí)例及分析過(guò)程,絕對(duì)的第一手?jǐn)?shù)據(jù)資料,很生動(dòng)的體現(xiàn)了參數(shù)thread_cache_size優(yōu)化的效果及優(yōu)化該參數(shù)的必要性,希望對(duì)各位系統(tǒng)管理員能有幫助。2011-03-03
SQL group by去重復(fù)且按照其他字段排序的操作
這篇文章主要介紹了SQL group by去重復(fù)且按照其他字段排序的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
MySQL InnoDB row_id邊界溢出驗(yàn)證的方法步驟
這篇文章主要給大家介紹了關(guān)于MySQL InnoDB row_id邊界溢出驗(yàn)證的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用MySQL InnoDB具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
mysql error 1071: 創(chuàng)建唯一索引時(shí)字段長(zhǎng)度限制的問(wèn)題
這篇文章主要介紹了mysql error 1071: 創(chuàng)建唯一索引時(shí)字段長(zhǎng)度限制的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
解決mysql使用not in 包含null值的問(wèn)題
這篇文章主要介紹了解決mysql使用not in 包含null值的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
linux下安裝mysql及mysql.sock問(wèn)題
最近在linux上裝mysql時(shí)遇到一些棘手的問(wèn)題,百思不得其解,下面小編給大家?guī)?lái)了linux下安裝mysql及mysql.sock問(wèn)題,感興趣的朋友一起看看吧2018-03-03

