今天開發反應兩樣的程序往一個庫裏面插入數據正常,往另一個庫裏面插入數據有亂碼。第一反應就是兩個數據庫關於字符集的配置不同。mysql
在兩個庫分別查看參數:sql
show variables like "%char%";數據庫
+--------------------------+------------------------------------------+ide
| Variable_name | Value |測試
+--------------------------+------------------------------------------+spa
| character_set_client | utf8 |server
| character_set_connection | utf8 |ip
| character_set_database | utf8 |ci
| character_set_filesystem | binary |開發
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+--------------------------+------------------------------------------+
>show variables like "%char%";
+--------------------------+------------------------------------------+
| Variable_name | Value |
+--------------------------+------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+--------------------------+------------------------------------------+
能夠看到character_set_server的參數配置不同,因而將有問題的那個庫配置成utf8,開發再次測試的時候表示還有亂碼問題,這時想起來校驗字符集沒有改,因而分別查看兩邊校驗字符集的差別:
>show variables like "%coll%";
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
>show variables like "%coll%";
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
能夠看到collation_server 參數設置不一致,因而把這個參數也改爲了utf8,再次測試的時候數據顯示正常。
mysql支持多個層次的字符集設置:
服務層(server)、數據庫層(database)、數據表(table)、字段(column)、鏈接(connection)、結果集(result)
優先級:server > database > table > column
爲了不出現因字符不一致致使的中文亂碼的問題,最好就是將字符集所有設置成同樣的。
另外提一下skip-character-set-client-handshake這個參數,能夠經過開啓這個參數來過濾客戶端設置的字符集