mysql 字符集亂碼問題

#查看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)

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

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

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

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

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

set character_set_connection=utf8;

若是客戶端插入時和取出時字符集不同就會亂碼?ide

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

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

#建立數據庫t5.server

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

#插入使用的字符集utf8;it

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

#查看時沒問題.io

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

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

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)
相關文章
相關標籤/搜索