mysql 字符集亂碼問題

#查看mysql數據庫的字符集.

mysql> show variables like "%character%";
+--------------------------+-----------------------------+
| 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       | /data/mysql/share/charsets/ |
+--------------------------+-----------------------------+
8 rows in set (0.01 sec)

#客戶端查看時,客戶端的字符集.

mysql> set character_set_client=utf8;
Query OK, 0 rows affected (0.00 sec)

#客戶端查詢時,數據庫返回給客戶使用的字符集.

mysql> set character_set_results=gbk;
Query OK, 0 rows affected (0.00 sec)

#數據存儲時的連接器,使用gbk和utf都行,存儲數據時都會轉換爲utf8.

set character_set_connection=utf8;

如果客戶端插入時和取出時字符集不一樣就會亂碼?

#設置客戶端的字符集爲utf8.

mysql> set character_set_client=utf8;
Query OK, 0 rows affected (0.00 sec)

#創建數據庫t5.

mysql> create table t5 ( name char(20) );
Query OK, 0 rows affected (0.02 sec)

#插入使用的字符集utf8;

mysql> insert into t5 values ("中國");
Query OK, 1 row affected (0.00 sec)

#查看時沒問題.

mysql> select * from t5;
+--------+
| name   |
+--------+
| 中國   |
+--------+
1 row in set (0.00 sec)

#取出時讓服務端返回給gbk的字符集.

mysql> set character_set_results=gbk;
Query OK, 0 rows affected (0.00 sec)

#設置服務端返回時gbk就亂碼了.

mysql> select * from t5;
+------+
| name |
+------+
| א¹|
+------+
1 row in set (0.02 sec)

注意:我使用的客戶端xshell鏈接,字符集爲utf8字符集.


#如果把客戶端/連接器/服務端都設置爲utf8肯定不會亂碼.

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_results=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from t5;
+--------+
| name   |
+--------+
| 中國   |
+--------+
1 row in set (0.00 sec)

#使用names可以直接將這三條都設置爲同一個字符集.

mysql> set names gbk;
Query OK, 0 rows affected (0.00 sec)

#查看字符集發現clien/connection/results都變爲gbk.

mysql> 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     | utf8                        |
| character_set_system     | utf8                        |
| character_sets_dir       | /data/mysql/share/charsets/ |
+--------------------------+-----------------------------+
8 rows in set (0.00 sec)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章