HELLO WORLD--一|

kingwzun

园龄:3年6个月粉丝:111关注:0

MySQL 终端乱码/字符集插入错误 -解决指南

解决的问题

  1. 数据库查询乱码
    比如:
mysql> select *from teacher;
+-----------+--------+--------------------------+--------------------------+-----------------+
| teacherno | tname | major | prof | department |
+-----------+--------+--------------------------+--------------------------+-----------------+
| 1 | 鏉庡崕 | 杞欢宸ョ▼ | 缃戠粶鎶€鏈? | 璁$畻鏈哄闄? |
| 10 | 鍛ㄨ棌 | 杞欢宸ョ▼ | 鐗╄仈缃? | 璁$畻鏈哄闄? |
| 2 | 鐜嬩笁 | 缃戠粶瀹夊叏 | 杞欢宸ョ▼ | 璁$畻鏈哄闄? |
| 3 | 鐜嬫捣 | 鐗╄仈缃? | 杞欢宸ョ▼ | 璁$畻鏈哄闄? |
| 4 | 璧甸湠 | 璁$畻鏈虹瀛︿笌鎶€鏈? | 鐗╄仈缃? | 璁$畻鏈哄闄? |
| 5 | 鑾插績 | 璁$畻鏈虹瀛︿笌鎶€鏈? | 鐗╄仈缃? | 璁$畻鏈哄闄? |
| 6 | 鏂囨 | 杞欢宸ョ▼ | 璁$畻鏈虹瀛︿笌鎶€鏈? | 璁$畻鏈哄闄? |
| 7 | 閮戝浗 | 璁$畻鏈虹瀛︿笌鎶€鏈? | 杞欢宸ョ▼ | 璁$畻鏈哄闄? |
| 8 | 鍒囧厠 | 杞欢宸ョ▼ | 璁$畻鏈虹瀛︿笌鎶€鏈? | 璁$畻鏈哄闄? |
| 9 | 鐜嬫檽 | 鐗╄仈缃? | 璁$畻鏈虹瀛︿笌鎶€鏈? | 璁$畻鏈哄闄? |
+-----------+--------+--------------------------+--------------------------+-----------------+
10 rows in set (0.00 sec)
  1. 插入中文时显示编码错误
    比如:
mysql> insert into teacher values
-> (11,'dfsd','东方','计算','吉森');
ERROR 1366 (HY000): Incorrect string value: '\xB6\xAB\xB7\xBD' for column 'major' at row 1

解决方法概述

  1. 先将所有的编码都改为uutf8
    • 所有信息:数据库编码,每个表格的编码,表格的每个属性的编码方式
      好像只要数据库的编码全是utf8就可以,欢迎反馈
  1. 将character_set_client 和character_set_results修改为gbk

完成,下面每个步骤具体说明
image

将所有的编码都改为uutf8

通过网络查找吧。
好像只要数据库的编码全是utf8就可以,欢迎反馈
查看数据库编码方法

show variables like 'char%';

解决命令窗口问题

上述设置后,在应用程序(Navicat Premium等)中应该可以正常的显示数据

但是在命令窗口不能正常显示。

暂时解决-重启mysql失效

查看数据库编码

show variables like 'char%';

查看数据库编码

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 6.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)

配置说明:
character_set_client 客户端字符集

character_set_connection 客户端与服务器端连接采用的字符集

character_set_results SELECT查询返回数据的字符集

character_set_database 数据库采用的字符集

修改如下编码集

set character_set_client=gbk;
set character_set_results=gbk;

修改完后再次查看数据库编码

show variables like 'char%';

应该会显示这样

+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | gbk |
| character_set_connection | utf8 |
| 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 6.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)

这样即可正常在命令窗口正常使用mysql数据库。
image

永久设置

(未测试,理论上ok)
上面方法是设置全局的数据库字符编码,即设置整个MySQL服务的,当重启MySQL服务的时候,编码依然会变为原来的字符编码。

如果想永久设置字符编码,需要在配置文件中修改数据库的字符编码

编辑 /etc/my.cnf,

在里面加入下列代码即可,

  • 已经有[ XXX ]的,在里面直接加入即可。
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

重启数据库

重启数据库即可看到效果

service mysql restart

本文作者:kingwzun

本文链接:https://www.cnblogs.com/kingwz/p/16209578.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   kingwzun  阅读(198)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起