編碼檢視方式以及解釋說明:
需要以root使用者身份登陸才可以檢視資料庫編碼方式(以root使用者身份登陸的命令為:>mysql -u root –p,之後兩次輸入root使用者的密碼),檢視資料庫的編碼方式命令為:
>show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
從以上資訊可知資料庫的編碼為latin1,需要修改為gbk或者是utf8;
其中,
character_set_client: 為客戶端編碼方式;客戶端傳送的查詢中使用的字符集
character_set_connection: 為建立連線使用的編碼;
character_set_database: 資料庫的編碼;資料庫伺服器中某個庫使用的字符集設定,如果建庫時沒有指明,將使用伺服器安裝時指定的字符集設定。
character_set_results:結果集的編碼;
有待驗證:只要保證以上幾個採用的編碼方式一樣,就不會出現亂碼問題。
character_set_server: 資料庫伺服器的編碼;伺服器安裝時指定的預設字符集設定。
character_system: 資料庫系統使用的字符集設定。
另一個檢視資料庫編碼的命令:
>SHOW VARIABLES LIKE 'collation%';
MYSQL關於字元編碼方面的儲存原理
程式配置檔案.連線串: CharSet=UTF8, 說明:
查詢語句使用此種編碼格式傳送到伺服器上
注意:查詢結果仍然是以反回資料的格式傳送。
查詢語句執行邏輯:
1. 程式配置連線串: CharSet=UTF8, 將查詢語句使用"CharSet=UTF8"此種格式的編碼傳送到伺服器上
2. Mysql將接收到的查詢語句轉成character_set_client指定的格式,
3. 接著轉成character_set_connection指定的格式
4. 接著將character_set_connection轉為內部操作字元
- 使用每個資料欄位的CHARACTER SET設定值;
- 若上述值不存在,則使用對應資料表的DEFAULT CHARACTER SET設定值(MySQL擴充套件,非SQL標準);
- 若上述值不存在,則使用對應資料庫的DEFAULT CHARACTER SET設定值;
- 若上述值不存在,則使用character_set_server設定值。
5. 將操作結果從內部操作字符集轉換為character_set_results。
執行語句執行邏輯
1. 程式配置連線串: CharSet=UTF8, 將執行語句使用"CharSet=UTF8"此種格式的編碼傳送到伺服器上
2. Mysql將接收到的查詢語句轉成character_set_client指定的格式,
3. 接著轉成character_set_connection指定的格式
4. 接著將character_set_connection轉為內部操作字元
- 使用每個資料欄位的CHARACTER SET設定值;
- 若上述值不存在,則使用對應資料表的DEFAULT CHARACTER SET設定值(MySQL擴充套件,非SQL標準);
- 若上述值不存在,則使用對應資料庫的DEFAULT CHARACTER SET設定值;
- 若上述值不存在,則使用character_set_server設定值。
5. 將操作結果從內部操作字符集轉換為character_set_database儲存