標籤:variables name 行資料 特定 測試 ali menu connect ash
{轉!}
背景:
由於最近在開發一個APP的背景程式,需要Java串連遠端MySQL資料庫進行資料的更新和查詢操作,並且插入的資料裡有中文,在插入到資料庫後發現中文都是亂碼。網上查了很多教程,最後都沒有解決,所以在這裡記錄下我解決的步驟,希望能夠給以後遇到相同問題朋友一個參考,同時也起到記筆記的作用。
1.資料庫插入中文亂碼首先需要排除的問題是,MySQL的預設字元集和對應database的字元集是什麼。
通常為了以後的相容性,建議將整個MySQL的預設字元集都設定成utf-8。
可以使用以下命令查看預設字元集:
[plain]view plain copy print?
- 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?
- // 驅動程式名
- private static String driver = "com.mysql.jdbc.Driver";
- // URL指向要訪問的資料庫名
- private static String url = "jdbc:mysql://localhost:3306/watermarking?useUnicode=true&characterEncoding=utf-8";
- // MySQL配置時的使用者名稱
- private static String user = "root";
- // MySQL配置時的密碼
- private static String password = "root";
URL中“?”後面的就是指定使用UTF-8進行字元編碼,經過測試,我的程式能夠正常的插入中文了。
希望能夠協助需要的朋友,如果還有問題可以給我留言~
java連結mysql 中文亂碼