Mysql關於字元集的變數有
SQL: show variables like '%character%'
+--------------------------+-----------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:\wamp\bin\mysql\mysql5.5.16\share\charsets\ |
+--------------------------+-----------------------------------------------+
上面就是所有關於Mysql中字元集的設定,相信弄懂的了上面的變數的含義,就再也不會有什麼資料亂碼的煩惱了吧
character_set_client,character_set_connection,character_set_result
這三個變數,
分別告訴MySQL 用戶端的編碼集, 在傳輸給MySQL伺服器的時候的編碼集, 以及期望MySQL返回的結果的編碼集,
我們要想得到正確編碼的資料,首它們的編碼集應該一樣,而設定編碼上面三個變數編碼集一樣有一個快捷方法:
set names utf8
執行上面的那個命令,可以一次將 character_set_client,character_set_connection,character_set_result
三個變數都設定成 UTF-8 的編碼,
然後我們要得到正解編碼的資料,還要知道資料庫的編碼方法,也就是上面設定的
character_set_database,這隻是資料庫的預設編碼,而
我們知道存放資料的是表,所以我們要以表中的字元為基準,如果不設定表的字元集的話,會繼承資料庫字元集
所以如果資料庫出現亂碼的情況下,我們就看一下上面的四種情況下的編碼是不是一樣
對於Java中,執行Set names utf8 並不以解決亂碼問題,而其中解決的辦法是改變串連串,在連接字串中指定字元集:
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xsgl?useUnicode=true&characterEncoding=UTF-8","root","root");
這個字元集指定的是character_set_client ;character_set_connection 的編碼是utf8,而並沒有指定 character_set_results
的編碼為空白,
所以現在存放資料庫應該沒問題,但如果取出,還要將 character_set_results 的編碼與應用程式的編碼(控制台、Java等)相同
http://hi.baidu.com/dburu/blog/item/67b0958bff8b5fdbfd1f108c.html