問題症狀:
1,用mysql-front等客戶端編寫的sql語句向mysql插入中文字符沒有任何問題。
2,用 註明了連接方式(包括host,user,passward,database,charset)的python向mysql插入中文字符沒有問題。
3,檢查了eclipse和系統的默認字符集,都是utf-8,沒有問題。
可是,用java向mysql插入中文字符就是有亂碼。倒騰了快一天。。。
問題排查:
檢查mysql端的用show variables like '%char%' 得到如下結果:
"character_set_client","utf8"
"character_set_connection","utf8"
"character_set_database","utf8"
"character_set_filesystem","binary"
"character_set_results","utf8"
"character_set_server","latin1"
"character_set_system","utf8"
"character_set_connection","utf8"
"character_set_database","utf8"
"character_set_filesystem","binary"
"character_set_results","utf8"
"character_set_server","latin1"
"character_set_system","utf8"
這說明服務器上mysql默認的server端的編碼方式爲latin1,儘管我需要操作的數據庫實例的大多數表的大多數字段都已經寫成了utf-8,但使用jdbc的默認連接方式仍然會出現亂碼問題。
解決方案:
在java的連接字符串中寫明需要的編碼方式,
例如,連接字符串寫成:
jdbc:mysql://192.9.200.41:3306/mydbinstance?characterEncoding=utf-8
總結:
如果遇到亂碼問題可以從三個方面檢查
a, eclipse和java的默認編碼格式,可以通過System.out.println(Charset.defaultCharset());判斷。
b,檢查mysql表中字段使用的編碼方式。
c,連接字符串中的編碼方式。