1. 程式人生 > >JDBC查詢條件中包含中文,無查詢結果(編碼問題)

JDBC查詢條件中包含中文,無查詢結果(編碼問題)

JDBC查詢條件中包含中文,無查詢結果(編碼問題)

 

mysql:
Variable_name Value
character_set_client gbk
character_set_connection gbk
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8

jdbc指定編碼:gb2312

問題描述:
查詢條件:where name='關稅'
client 查詢結果:正常顯示
jdbc 查詢結果:無顯示

已解決:
jdbc和client的角色都是客戶端,'關稅'分別作為gbk ,gb2312進行了查詢。jdbc指定了utf8。
jdbc在連線時,指定編碼應該和client保持一致。

實踐得出的結論:
my.ini檔案需要進行以下配置
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
client和server都會讀取這個檔案,[client]以下的引數是由客戶端讀取,不用重啟服務,重新開啟客戶端便會生效
[mysqld]以下的引數由服務端讀取,重啟服務後生效。
以上配置用來設定character_set_client character_set_connection character_set_server都為utf8.

以下援引其他博文:

    2.mysql資料庫的編碼,原則上預設的編碼是mysql安裝的預設編碼,也可以在建庫時用語句來執行:create databasedbname default character set utf8;
    3.mysql資料表的編碼,原則上預設是第二步建立的資料庫的編碼。提倡不要在creat table時加上編碼
    4.利用程式建立mysql連線時,連線字串使用的編碼。如jdbc,這個地方必須是與你頁面的編碼一致。
    5.WEB程式頁面的編碼,charset=utf8;與4必須一致。
  除上面5個地方外,另有一個不是編碼者所能控制的,那就是瀏覽使用者的瀏覽器的編碼,一般是自動選擇,就不列入了。
  

上述五個地方,我所知道的保證不出現亂碼的方法是:

2,3比較重要,我所理解的必須是一致。建議是在建庫語句時帶上編碼,建表時就不指定編碼了。
4是必須的
5在WEB頁面中必須設定成上面的統一的編碼。

請不要結束,繼續往下看:上述方法中必須統一是統一的編碼,我使用的是utf8,為什麼使用utf8是我正要說的。
備註說明

  1、統一使用GBK編碼的話,大多數時候是不會出問題。但是如果遇到·這種字元,這個欄位後的所有漢字都回出現亂碼。這在oracle中同樣存在。因為mysql,oracle的預設編碼似乎都是(mysql-latin1亦是)iso-8559-1,對某些特殊字元會出現亂碼。因此建議使用utf8。utf8有利於建設網站的其它版本,比如英文版...,而且設定似乎也沒有絲毫麻煩。。

參見:http://blog.csdn.net/twosecon...

未解決的:
1.關於mysql字符集的問題,以及character_set_client character_set_connection character_set_server character_set_system,還要研究:
http://dev.mysql.com/doc/refm...
http://dev.mysql.com/doc/refm...
http://www.th7.cn/db/mysql/20...
還有印象筆記

2.瞭解字符集
這裡jdbc指定了utf8,而client是gbk,也是對的。