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
posted @ 2022-04-30 10:35  kingwzun  阅读(195)  评论(0编辑  收藏  举报