{轉!}
背景:
由於最近在開發一個APP的后台程序,需要Java連接遠程的MySQL數據庫進行數據的更新和查詢操作,並且插入的數據里有中文,在插入到數據庫后發現中文都是亂碼。網上查了很多教程,最后都沒有解決,所以在這里記錄下我解決的步驟,希望能夠給以后遇到相同問題朋友一個參考,同時也起到記筆記的作用。
1.數據庫插入中文亂碼首先需要排除的問題是,MySQL的默認字符集和對應database的字符集是什么。
通常為了以后的兼容性,建議將整個MySQL的默認字符集都設置成utf-8。
可以使用以下命令查看默認字符集:
- mysql> SHOW VARIABLES LIKE 'character%';
建議對於新裝的MySQL直接將整個所有的默認字符集都設置成utf-8,對於已經有很多database的可以單獨設置特定的數據庫的字符集。
有關字符集的一些設置方法:
修改特定數據庫的字符集
mysql>use mydb
mysql>alter database mydb character set utf8;
創建數據庫指定數據庫的字符集
mysql>create database mydb character set utf8;
通過配置文件修改:
修改/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:
[root@bogon ~]# /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應該寫成如下樣式:
- // 驅動程序名
- 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進行字符編碼,經過測試,我的程序能夠正常的插入中文了。
希望能夠幫助需要的朋友,如果還有問題可以給我留言~