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

問(wèn)題背景:

數(shù)據(jù)庫(kù)遷移,使用 mysqldump 導(dǎo)出的文件,創(chuàng)建新的數(shù)據(jù)庫(kù)。

原庫(kù):MySQL 5.7.17
新庫(kù):MySQL 5.7.18

問(wèn)題:使用新的庫(kù),測(cè)試發(fā)現(xiàn)網(wǎng)頁(yè)的某個(gè)標(biāo)簽下沒(méi)有查出內(nèi)容。

嘗試:
1,靜態(tài)復(fù)制數(shù)據(jù)庫(kù)文件
2,升級(jí) MySQL 到同一個(gè)小版本

問(wèn)題仍然存在。

發(fā)現(xiàn)問(wèn)題的線索:
再三確認(rèn)排除代碼的不一致之后,直接使用 java 的API接口測(cè)試。
分別連接老庫(kù)和新庫(kù),發(fā)現(xiàn)連接老庫(kù)可以返回內(nèi)容,連接新庫(kù)則不可以。

分別在老庫(kù)和新庫(kù)在線開(kāi)啟 MySQL 查詢?nèi)罩?,獲取查詢語(yǔ)句:

SET GLOBAL general_log=1;

開(kāi)啟之后,獲得了查詢語(yǔ)句,發(fā)現(xiàn)問(wèn)題點(diǎn),老庫(kù)上部分SQL語(yǔ)句如下:
    
    and  dd_notices.typeName='??'

新庫(kù)上部分SQL語(yǔ)句如下:
          
    and  dd_notices.typeName='通知'

這里是中文的查詢條件,猜測(cè)導(dǎo)致此問(wèn)題的大概是字符集問(wèn)題。

網(wǎng)查了解到如下信息:

mysql 數(shù)據(jù)庫(kù)內(nèi)容可以有多種編碼。
首先要知道數(shù)據(jù)庫(kù)的編碼格式然后在db連接建立的url當(dāng)中增加條件
useUnicode是否使用Unicode字符集,如果參數(shù)characterEncoding設(shè)置為gb2312或gbk,本參數(shù)值必須設(shè)置為true缺省值為false
characterEncoding當(dāng)useUnicode設(shè)置為true時(shí),指定字符編碼。比如可設(shè)置為gb2312或gbk
例如:
jdbc:mysql://127.0.0.1:3306/bookDB?useUnicode=true&characterEncoding=utf-8
...
當(dāng)參數(shù)2號(hào)為中文字符的時(shí)候如果db連接url不增加字符集則查不出任何行,英文任何字符集都支持

參考:http://blog.sina.com.cn/s/blog_5ff02a9f0100y7ot.html

那估計(jì)問(wèn)題處在 jdbc 連接參數(shù)上面,在參數(shù)里面添加 "&characterEncoding=UTF-8":

jdbc.url=jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true

重啟 tomcat 之后,可以返回結(jié)果了。
證明問(wèn)題是在這里。

留下的問(wèn)題:之前沒(méi)有加這個(gè)參數(shù),連接老庫(kù)是沒(méi)有字符集的問(wèn)題呢? 猜測(cè)跟 MySQL 這邊的默認(rèn)設(shè)置有關(guān)系。

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

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

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