問題描述
在前端輸入一段中文存入mysql中,發(fā)現(xiàn)mysql中的顯示是??
矛盾點(diǎn)
在前端發(fā)請(qǐng)求的時(shí)候設(shè)置了字符編碼為utf-8(utf8:用以解決國(guó)際上不同語(yǔ)言而出現(xiàn)的編碼),但為什么數(shù)據(jù)庫(kù)中卻接受不到中文扮叨。。谢鹊。
問題解決
Q1:首先判斷下問題可能在哪?
我們?cè)谙騧ysql 寫入中文數(shù)據(jù)時(shí)留凭,在客戶端(前端佃扼,后端的java程序)、數(shù)據(jù)庫(kù)連接蔼夜、寫入數(shù)據(jù)庫(kù)時(shí)分別要進(jìn)行編碼轉(zhuǎn)換兼耀;寫入數(shù)據(jù)庫(kù)后,在返回結(jié)果求冷、數(shù)據(jù)庫(kù)連接瘤运、客戶端((前端,后端的java程序))分別進(jìn)行編碼轉(zhuǎn)換匠题。從問題的描述中我們知道問題在寫入數(shù)據(jù)庫(kù)的過(guò)程中拯坟。。梧躺。
Q2: 雖然在發(fā)請(qǐng)求的時(shí)候設(shè)置了字符編碼為utf-8似谁,但還是不放心傲绣,懷疑問題可能會(huì)出在前端掠哥。
A2: 用postman進(jìn)行了測(cè)試,發(fā)送post請(qǐng)求秃诵,傳入的數(shù)據(jù)為中文续搀,去數(shù)據(jù)庫(kù)查看,發(fā)現(xiàn)還是???
,雖然這不能說(shuō)明前端是沒有問題的菠净,但證明了后端一定有問題禁舷。
Q3: 是SpringBoot 的問題嗎彪杉?
A3: 在網(wǎng)上嘗試了很多辦法,試圖將SpringBoot 的字符編碼設(shè)置為utf-8,后來(lái)發(fā)現(xiàn)SpringBoot 的默認(rèn)編碼方式就是utf-8.....
Q4:那么問題在哪里牵咙?
A4: 現(xiàn)在需要排查數(shù)據(jù)庫(kù)了派近。使用show variables like 'character_set_%'
來(lái)查看數(shù)據(jù)庫(kù)的編碼格式。
設(shè)置下數(shù)據(jù)庫(kù)連接時(shí)的字符編碼洁桌,怎么設(shè)置渴丸?不知道.....google 搜索,在jdbc 連接mysql的時(shí)候設(shè)置另凌,在springBoot 中application.properties中添加如下代碼:
spring.datasource.url=jdbc:mysql://localhost:13308/GrowthNoteList?useUnicode=true&characterEncoding=utf-8
設(shè)置后用上述命令查詢?nèi)缦拢?/p>
上述結(jié)果顯示的是mysql 數(shù)據(jù)庫(kù)系統(tǒng)中客戶端谱轨、數(shù)據(jù)庫(kù)連接、數(shù)據(jù)庫(kù)吠谢、文件系統(tǒng)土童、查詢結(jié)果、服務(wù)器工坊、系統(tǒng)的字符集設(shè)置及mysql的字符設(shè)置目錄献汗。
在這里,文件系統(tǒng)字符集是固定的栅组,系統(tǒng)雀瓢、服務(wù)器的字符集在安裝時(shí)確定,與亂碼問題無(wú)關(guān)玉掸,亂碼的問題與客戶端刃麸、數(shù)據(jù)庫(kù)連接、數(shù)據(jù)庫(kù)司浪、查詢結(jié)果的字符集設(shè)置有關(guān)泊业。(注:客戶端是看訪問mysql 數(shù)據(jù)庫(kù)的方式,通過(guò)命令行訪問啊易,命令行窗口就是客戶端吁伺,通過(guò)JDBC 等連接訪問,程序就是客戶端租谈。)
再次用postman測(cè)試篮奄,發(fā)現(xiàn)可以存入中文了,問題解決割去。
結(jié)論:jdbc連接數(shù)據(jù)庫(kù)的時(shí)候字符編碼需要設(shè)置成utf-8
反思
開始的時(shí)候沒有想到數(shù)據(jù)庫(kù)窟却,主管懷疑是springBoot,就從網(wǎng)上找設(shè)置SpringBoot字符編碼的方式,然后各種嘗試呻逆,浪費(fèi)了很多時(shí)間夸赫。。咖城。
action
當(dāng)陷入問題茬腿,一時(shí)解決不了時(shí)用tasking圖幫助理清思路呼奢,找出可能出現(xiàn)問題的點(diǎn),不能陷入問題切平,在google上盲目的搜索握础,會(huì)浪費(fèi)很多時(shí)間的。