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)

 

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