1. 程式人生 > >MySQL命令視窗中文亂碼或插入中文資料失敗

MySQL命令視窗中文亂碼或插入中文資料失敗

在Windwos上使用命令視窗操作MySQL資料庫時,如果命令視窗的字元編碼與資料庫不一致時,就會出現中文亂碼的情況

比如查詢會出現中文亂碼,或者插入資料會出現錯誤“ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name' at row 1”

mysql> insert into user(name,gender,age) values('張三','男',22);
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name' at row 1

mysql> select * from user;
+----+----------+--------+-----+---------------------+| id | name     | gender | age | updated_time        |
+----+----------+--------+-----+---------------------+|  1 | zhangsan | M      |  22 | 2018-10-31 17:03:25 |
|  2 | 寮犱笁     | 鐢?    |  22 | 2018-11-01 09:01:43 |
+----+----------+--------+-----+---------------------+2 rows in set (0.00 sec)

這時可以先檢視下環境編碼配置,我的是utf8,結果是下面這樣

mysql> 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       | C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\ |
+--------------------------+---------------------------------------------------------+8 rows in set (0.00 sec)

檢視windwos命令視窗的的屬性可知,編碼格式為GBK且不能更改

這時我們可以使用“set names gbk;”來指定客戶端傳送給mysql語句時的編碼格式,並且可以看到client、connection、results三個變數的編碼格式變為了gbk,其它的沒有變化

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

mysql> show variables like 'char%';
+--------------------------+---------------------------------------------------------+| 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       | C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\ |
+--------------------------+---------------------------------------------------------+8 rows in set (0.00 sec)

再次執行下插入操作沒問題了,查詢資料中文也不會亂碼了

mysql> insert into user(name,gender,age) values('張三','男',22);
Query OK, 1 row affected (0.04 sec)

mysql> select * from user;
+----+----------+--------+-----+---------------------+| id | name     | gender | age | updated_time        |
+----+----------+--------+-----+---------------------+|  1 | zhangsan | M      |  22 | 2018-10-31 17:03:25 |
|  2 | 張三         | 男       |  22 | 2018-11-01 09:01:43 |
+----+----------+--------+-----+---------------------+2 rows in set (0.00 sec)