java連結mysql 中文亂碼

來源:互聯網
上載者:User

標籤:variables   name   行資料   特定   測試   ali   menu   connect   ash   

 

{轉!}

 

背景:

由於最近在開發一個APP的背景程式,需要Java串連遠端MySQL資料庫進行資料的更新和查詢操作,並且插入的資料裡有中文,在插入到資料庫後發現中文都是亂碼。網上查了很多教程,最後都沒有解決,所以在這裡記錄下我解決的步驟,希望能夠給以後遇到相同問題朋友一個參考,同時也起到記筆記的作用。

 

1.資料庫插入中文亂碼首先需要排除的問題是,MySQL的預設字元集和對應database的字元集是什麼。

通常為了以後的相容性,建議將整個MySQL的預設字元集都設定成utf-8。

可以使用以下命令查看預設字元集:

 

[plain]view plain copy print?
  1. mysql> SHOW VARIABLES LIKE ‘character%‘;   

 

 

我的預設設定如下:

 

 

 

建議對於新裝的MySQL直接將整個所有的預設字元集都設定成utf-8,對於已經有很多database的可以單獨設定特定的資料庫的字元集。

有關字元集的一些設定方法:

修改特定資料庫的字元集
mysql>use mydb
mysql>alter database mydb character set utf-8;

建立資料庫指定資料庫的字元集
mysql>create database mydb character set utf-8;

通過設定檔修改:
修改/var/lib/mysql/mydb/db.opt
default-character-set=latin1
default-collation=latin1_swedish_ci

default-character-set=utf8
default-collation=utf8_general_ci
重起MySQL:
[[email protected] ~]# /etc/rc.d/init.d/mysql restart

通過MySQL命令列修改:
mysql> set character_set_client=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_connection=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_database=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_results=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_server=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_system=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> set collation_connection=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> set collation_database=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> set collation_server=utf8;
Query OK, 0 rows affected (0.01 sec)

 

 

2.這個相關的設定作業網上都有很多的教程。我也是按照教程都設定成了utf-8,如果通過以上的操作,你已經可以正常插入中文了,下面的就可以不用看啦~

但是我通過Java的JDBC插入資料庫的中文依然是亂碼。

最後經過各種嘗試和查詢發現是因為JDBC傳輸的時候預設不是用utf-8對sql語句編碼。

所以我們還需要做的一項操作:

指定JDBC在傳輸的時候使用utf-8編碼,這樣整個程式處理、傳輸、資料庫儲存都統一了編碼格式,因此中文就不會亂碼了。

所以Java程式JDBC對應的資料庫URL應該寫成如下樣式:

 

[plain]view plain copy print?
  1. // 驅動程式名  
  2.    private static String driver = "com.mysql.jdbc.Driver";  
  3.    // URL指向要訪問的資料庫名  
  4.    private static String url = "jdbc:mysql://localhost:3306/watermarking?useUnicode=true&characterEncoding=utf-8";  
  5.    // MySQL配置時的使用者名稱  
  6.    private static String user = "root";  
  7.    // MySQL配置時的密碼  
  8.    private static String password = "root";  



 

 

 

URL中“?”後面的就是指定使用UTF-8進行字元編碼,經過測試,我的程式能夠正常的插入中文了。

希望能夠協助需要的朋友,如果還有問題可以給我留言~

java連結mysql 中文亂碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.