|
|
51CTO旗下网站
|
|
移动端

MySQL数据库命令窗口中文乱码或插入中文数据失败

在Windwos上使用命令窗口操作MySQL数据库时,如果命令窗口的字符编码与数据库不一致时,就会出现中文乱码的情况

作者:lixuelong来源:开源中国|2018-11-02 11:18

在Windwos上使用命令窗口操作MySQL数据库时,如果命令窗口的字符编码与数据库不一致时,就会出现中文乱码的情况

比如查询会出现中文乱码,或者插入数据会出现错误“ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name' at row 1”

  1. mysql> insert into user(name,gender,age) values('张三','男',22);  
  2. ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name' at row 1  
  3. mysql> select * from user 
  4. +----+----------+--------+-----+---------------------+  
  5. | id | name | gender | age | updated_time |  
  6. +----+----------+--------+-----+---------------------+  
  7. | 1 | zhangsan | M | 22 | 2018-10-31 17:03:25 |  
  8. | 2 | 寮犱笁 | 鐢? | 22 | 2018-11-01 09:01:43 |  
  9. +----+----------+--------+-----+---------------------+  
  10. rows in set (0.00 sec) 

这时可以先查看下环境编码配置,我的是utf8,结果是下面这样

  1. mysql> show variables like 'char%';  
  2. +--------------------------+---------------------------------------------------------+  
  3. | Variable_name            | Value                                                   |  
  4. +--------------------------+---------------------------------------------------------+  
  5. | character_set_client     | utf8                                                    |  
  6. | character_set_connection | utf8                                                    |  
  7. | character_set_database   | utf8                                                    |  
  8. | character_set_filesystem | binary                                                  |  
  9. | character_set_results    | utf8                                                    |  
  10. | character_set_server     | utf8                                                    |  
  11. | character_set_system     | utf8                                                    |  
  12. | character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\ |  
  13. +--------------------------+---------------------------------------------------------+  
  14. 8 rows in set (0.00 sec) 

查看windwos命令窗口的的属性可知,编码格式为GBK且不能更改

这时我们可以使用“set names gbk;”来指定客户端发送给mysql语句时的编码格式,并且可以看到client、connection、results三个变量的编码格式变为了gbk,其它的没有变化

  1. mysql> set names gbk;  
  2. Query OK, 0 rows affected (0.00 sec)  
  3. mysql> show variables like 'char%';  
  4. +--------------------------+---------------------------------------------------------+  
  5. | Variable_name            | Value                                                   |  
  6. +--------------------------+---------------------------------------------------------+  
  7. | character_set_client     | gbk                                                     |  
  8. | character_set_connection | gbk                                                     |  
  9. | character_set_database   | utf8                                                    |  
  10. | character_set_filesystem | binary                                                  |  
  11. | character_set_results    | gbk                                                     |  
  12. | character_set_server     | utf8                                                    |  
  13. | character_set_system     | utf8                                                    |  
  14. | character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\ |  
  15. +--------------------------+---------------------------------------------------------+  
  16. 8 rows in set (0.00 sec) 

再次执行下插入操作没问题了,查询数据中文也不会乱码了

  1. mysql> insert into user(name,gender,age) values('张三','男',22);  
  2. Query OK, 1 row affected (0.04 sec)  
  3. mysql> select * from user;  
  4. +----+----------+--------+-----+---------------------+  
  5. | id | name     | gender | age | updated_time        |  
  6. +----+----------+--------+-----+---------------------+  
  7. |  1 | zhangsan | M      |  22 | 2018-10-31 17:03:25 |  
  8. |  2 | 张三         | 男       |  22 | 2018-11-01 09:01:43 |  
  9. +----+----------+--------+-----+---------------------+  
  10. 2 rows in set (0.00 sec)  

【编辑推荐】

  1. MySQL:缓存算什么东西?!
  2. 关系型数据库尚能饭否?NoSQL、NewSQL谁能接棒?
  3. 没遇到过这十个MySQL数据库经典错误,你一定不是个好工程师
  4. 正确选择开源数据库的5个技巧
  5. 11月数据库榜单,SQLit 前十,PostgreSQ 连续暴涨
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

点石成金:访客至上的网页设计秘笈(原书第2版)

有些网站看起来很清爽; 有些网站看起来很杂乱; 有些网站能让你轻松地找到资料; 有些网站让你犹如置身迷宫…… ...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊