昨天晚上在做SSH項目時,采用了createSQLQuery來從資料庫查詢資料,資料庫為SQL,查詢語句為:
select * from v_sail_book where BOOK_NAME LIKE '%狼%';
該SQL語句在workbench中的執行結果如圖:
但是在hibernate的createSQLQuery來查詢得到的結果卻是空的,這個問題纏繞了我一晚上,最後終于發現原來是hibernate的配置檔案裡沒有改編碼,最後将hibernate.cfg.xml中的
<property name="connection.url">
jdbc:mysql://localhost/jsg
</property>
改為了
<property name="connection.url">
jdbc:mysql://localhost/jsg?useUnicode=true&characterEncoding=UTF-8
</property>
設定資料庫連接配接的編碼為UTF-8。
初步估計是沒有設定編碼,是以使用createSQLQuery來查詢時中文亂碼了,于是我将上述的SQL語句換為了:
select * from v_sail_book where BOOK_NAME LIKE '%Java%';
于是資料庫的查詢結果和createSQLQuery的查詢結果一樣了,原來真的是編碼的問題,是以大家以後使用hibernate時千萬不要忘了在連接配接url後加上編碼。