問題背景:
數(shù)據(jù)庫遷移,使用 mysqldump 導出的文件,創(chuàng)建新的數(shù)據(jù)庫。
原庫:MySQL 5.7.17
新庫:MySQL 5.7.18
問題:使用新的庫,測試發(fā)現(xiàn)網(wǎng)頁的某個標簽下沒有查出內(nèi)容。
嘗試:
1,靜態(tài)復制數(shù)據(jù)庫文件
2,升級 MySQL 到同一個小版本
問題仍然存在。
發(fā)現(xiàn)問題的線索:
再三確認排除代碼的不一致之后,直接使用 java 的API接口測試。
分別連接老庫和新庫,發(fā)現(xiàn)連接老庫可以返回內(nèi)容,連接新庫則不可以。
分別在老庫和新庫在線開啟 MySQL 查詢?nèi)罩荆@取查詢語句:
SET GLOBAL general_log=1;
開啟之后,獲得了查詢語句,發(fā)現(xiàn)問題點,老庫上部分SQL語句如下:
and dd_notices.typeName='??'
新庫上部分SQL語句如下:
and dd_notices.typeName='通知'
這里是中文的查詢條件,猜測導致此問題的大概是字符集問題。
網(wǎng)查了解到如下信息:
mysql 數(shù)據(jù)庫內(nèi)容可以有多種編碼。
首先要知道數(shù)據(jù)庫的編碼格式然后在db連接建立的url當中增加條件
useUnicode是否使用Unicode字符集,如果參數(shù)characterEncoding設置為gb2312或gbk,本參數(shù)值必須設置為true缺省值為false
characterEncoding當useUnicode設置為true時,指定字符編碼。比如可設置為gb2312或gbk
例如:
jdbc:mysql://127.0.0.1:3306/bookDB?useUnicode=true&characterEncoding=utf-8
...
當參數(shù)2號為中文字符的時候如果db連接url不增加字符集則查不出任何行,英文任何字符集都支持
參考:http://blog.sina.com.cn/s/blog_5ff02a9f0100y7ot.html
那估計問題處在 jdbc 連接參數(shù)上面,在參數(shù)里面添加 "&characterEncoding=UTF-8":
jdbc.url=jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
重啟 tomcat 之后,可以返回結(jié)果了。
證明問題是在這里。
留下的問題:之前沒有加這個參數(shù),連接老庫是沒有字符集的問題呢? 猜測跟 MySQL 這邊的默認設置有關(guān)系。