MySQL数据库5.7字符集的设置——MySQL8.0加密问题解决

MySQL数据库5.7

  • MySQL数据库5.7
    • 1. 5.7乱码:ERROR 1366 (HY000): Incorrect string value: '\xC0\xEE\xCB\xC4' for column 'name' at row 1
      • 1.1 问题分析
      • 1.2 问题解决:查看编码 `show variables like 'character_%';`
      • 1.3 方法1:修改编码,添加中文数据
      • 1.4 方法2:修改配置文件——重启MySQL服务
      • 1.5 命令重启
    • 2. Mysql8.0 Navicat可视化工具连接失败
      • 2.1 问题分析
      • 2.2 问题解决

MySQL数据库5.7

这个乱码只有安装数据库是5.7的才会有这种情况,数据库是8.0的默认都是utf-8的,不需要修改就可以直接使用的

1. 5.7乱码:ERROR 1366 (HY000): Incorrect string value: ‘\xC0\xEE\xCB\xC4’ for column ‘name’ at row 1

1.1 问题分析

在创建表或者创建库的时候,如果没有指定编码,默认是拉丁(CHARSET=latin1)的

1.2 问题解决:查看编码 show variables like 'character_%';

mysql> show variables like 'character_%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | gbk                                                     |
| character_set_connection | gbk                                                     |
| character_set_database   | latin1                                                  |
| character_set_filesystem | binary                                                  |
| character_set_results    | gbk                                                     |
| character_set_server     | latin1                                                  |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.00 sec)


1.3 方法1:修改编码,添加中文数据

  1. 修改编码 :
    set character_set_server=utf8;;
    set character_set_database=utf8;
  2. 存储成功
mysql> show create table employess;
+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                                       |
+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------+
| employess | CREATE TABLE `employess` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) CHARACTER SET gbk DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> insert into employess values (1002,'李四');
ERROR 1366 (HY000): Incorrect string value: '\xC0\xEE\xCB\xC4' for column 'name' at row 1

mysql> set character_set_database=utf8;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> set character_set_server=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into employess values (1001,'张三');
Query OK, 1 row affected (0.00 sec)

mysql> select * from employess;
+------+------+
| id   | name |
+------+------+
| 1001 | 张三 |
+------+------+
1 row in set (0.00 sec)


mysql> insert into employess values(1002,'李四');
Query OK, 1 row affected (0.00 sec)

mysql> select * from employess;
+------+------+
| id   | name |
+------+------+
| 1001 | 张三 |
| 1002 | 李四 |
+------+------+
2 rows in set (0.00 sec)


MySQL数据库5.7字符集的设置——MySQL8.0加密问题解决_第1张图片

1.4 方法2:修改配置文件——重启MySQL服务

首先我们需要找到我们安装MySQLC盘的位置(这里不是安装位置,是存放配置文件的位置)
C:\ProgramData\MySQL\MySQL Server 5.7
MySQL数据库5.7字符集的设置——MySQL8.0加密问题解决_第2张图片

配置文件中添加

default-character-set=utf8   #默认字符集 

character-set-server=utf8 
collatior-server=utf8_general_ci  

MySQL数据库5.7字符集的设置——MySQL8.0加密问题解决_第3张图片

1.5 命令重启

  1. 方法1(命令操作): 打开小黑框,

Linux直接可以支持启动:# service mysqld start 停止:# service mysqld stop 重启:# service mysqld restart

Windows只支持 停止:输入 net stop mysql57 启动 :输入 net start mysql57

MySQL数据库5.7字符集的设置——MySQL8.0加密问题解决_第4张图片

  1. 方法2(手动操作):
    此电脑——(右键)管理——服务与应用程序——服务——MYSQL——开启(停止、重启动)

2. Mysql8.0 Navicat可视化工具连接失败

错误号码2058 Plugin caching_sha2_password could not be loaded:.....

2.1 问题分析

这是MySQL8.0采用了更安全的加密方式,在我们安装的时候我们选择了这种更安全的加密方式,现在的可视化工具还不支持这种加密方式,如果当时选择下边的就不会出现这种问题了,解决办法有两种:
方法一:更新可以支持这种加密的可视化加密工具;
方法二:将加密方法改为之前的加密方式 (比较好操作)
MySQL数据库5.7字符集的设置——MySQL8.0加密问题解决_第5张图片

2.2 问题解决

出现这个原因:
MySQL8之前的版本中密码加密规则是mysql_native_password,
MysQL8之后,密码加密规则是caching_sha2_password。
现在我们将MySQL8用户登录密码加密规则还原成mysql_native_password。

用命令行(cmd)登录MySQL数据库之后,执行如下命令修改用户密码加密规则并更新用户密码,这里修改用户名为"root@localhost"的用户密码规则为“mysql_native_password”,密码值为“123456”,如图所示。

#用命令行账号密码登录
C:\Users\EDY>mysql -uroot -p

#使用mysql数据库
use mysql;

# 修改本地'root'@'localhost'用户的密码规则和密码   密码可以自定义,这里用的密码是123456
alter user 'root'@'localhost' identified with mysql_native_password by '123456';

# 修改远程连接的用户连接密码加密规则
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

# 查看用户名连接密码加密方式
mysql> select host,user,plugin from mysql.user;
+-----------+------------------+-----------------------+
| host      | user             | plugin                |
+-----------+------------------+-----------------------+
| %         | root             | mysql_native_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session    | caching_sha2_password |
| localhost | mysql.sys        | caching_sha2_password |
| localhost | root             | mysql_native_password |
+-----------+------------------+-----------------------+
5 rows in set (0.02 sec)

#刷新权限
flush privileges;

你可能感兴趣的:(MySQL,数据库,mysql,sql)