java jdbc 連接參數(shù)引發(fā)的問題,查詢條件帶中文(java+mysql)

問題背景:

數(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)系。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容