MySQL 字符集,乱码等问题解决centos7,Mysql5.7

MySQL 字符集说明以及字符集错误恢复

实验环境centos7以上版本(不会的看我以前的教程)
mysql5.7 (我带你快速装一次用yum装)

首先安装mysql
注:mysql-5.7.tar.gz 中包括了安装 mysql5.7 主要的软件包。 这样部署起来更方便
https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar
去这里下载tar包
然后上次到root的家目录下面
在这里插入图片描述

[root@huaxinfeng63 ~]# tar xvf mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar
[root@huaxinfeng63 ~]# yum -y install ./mysql*.rpm
[root@huaxinfeng63 ~]# systemctl start mysqld 	#启动 MySQL 会生成临时密码。

在 MySQL 的配置文件/etc/my.cnf 中关闭密码强度审计插件,并重启 MySQl 服务
[root@huaxinfeng63 ~]# vim /etc/my.cnf #修改 MySQL 的配置文件,在[myqld]标签处末行 添加以下项:

validate-password=OFF #不使用密码强度审计插件,记住一定是最后一行哦。

[root@huaxinfeng63 ~]# systemctl restart mysqld #重启 MySQL 服务

[root@huaxinfeng63 ~]# grep ‘temporary password’ /var/log/mysqld.log #获取临时密码
A temporary password is generated for root@localhost: buL.UJp4dSOd #临时密码

[root@huaxinfeng63 ~]# mysql -u root -p’buL.UJp4dSOd’ #使用临时密码登录 MySQl,注意临时密码要引号
登陆进来之后设置密码为123

mysql> set password for root@localhost = password('123'); #修改 root 用户密码为 123

字符集介绍

字符集就是一套文字符号及其编码、比较规则的集合,第一个计算机字符集 ASCII!MySQL 数据库字 符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念,其中字符集用来定义 MySQL 数据字符串的存储方式,而校对规则定义比较字符串的方式

在这里插入图片描述

MySQL 怎样选择合适的字符集

1.如果处理各种各样的文字,发布到不同语言国家地区,应选 Unicode 字符集,对 MySQL 来说就是 UTF-8(每个汉字三个字节)

2.如果只是需要支持中文,并且数据量很大,性能要求也高,可选 GBK(定长,每个汉字占双 字节,英文也占双字节),如果是大量运算,比较排序等,定长字符集更快,性能也高

3.处理移动互联网业务,可能需要使用 utf8mb4 字符集,apple

查看当前 MySQL 支持的字符集

MySQL 可以支持多种字符集,同一台服务器,库或表的不同字段都可以指定不同的字符集

[root@huaxinfeng63 ~]#  mysql -u root -p123 -e "show character set \G;"

在这里插入图片描述
这就是mysql支持的字符集 注:/G是以横向格式输出
查看常用的字符集:

[root@huaxinfeng63 ~]# mysql -uroot -p123 -e "show character set \G;" | egrep "gbk|utf8|awk'{print $0}'"

在这里插入图片描述
查看 MySQL 当前的字符集设置情况
[root@huaxinfeng63 ~]# mysql -uroot -p123
mysql> show variables like ‘character_set%’;
在这里插入图片描述
修改 MySQL 的字符集

[root@huaxinfeng63 ~]# vim /etc/my.cnf #修改 MySQL 配置文件,在[mysqld]处的未 行添加如下:
[root@huaxinfeng63 ~]# character-set-server=utf8
[root@huaxinfeng63 ~]# systemctl restart mysqld
[root@huaxinfeng63 ~]# mysql -u root -p123
mysql> show variables like 'character_set%';

在这里插入图片描述

实验

在不使用任何工具的情况下,修改字符集,保证数据完整性,但是要停服务器中途不能进行增删改操作

将字符集为 latin1 已有记录的数据转成 utf8,并且已经存在的记录不乱码

  1. 步骤
    (1) 建库及建表的语句导出,sed 批量修改为 UTF-8
    (2) 导出之前所有的数据
    (3) 修改 MySQL 服务端和客户端编码为 UTF-8
    (4) 删除原有的库表及数据
    (5) 导入新的建库及建表语句
    (6) 导入之前的数据

首先你要把表结构导出,导出book的表结构到booktabke.sql中
[root@huaxinfeng63 ~]# mysqldump -u root -p123 --default-character-set=latin1 -d book> booktable.sql

  1. 编辑 booktable.sql 将 latin1 修改成 utf8
    [root@huaxinfeng63 ~]# vim booktable.sql #修改所有 latin1 为 utf8
    在 vim 未行模式下 :%s/latin1/utf8/g 全文查找 latin1 并替换为 utf8。

  2. 确保数据库不再更新,导出所有数据
    [root@huaxinfeng63 ~]# mysqldump -u root -p153456 --quick --no-create-info – extended-insert --default-character-set=latin1 book > bookdata.sql
    参数说明:

–quick:用于转储大的表,强制 mysqldump 从服务器一次一行的检索数据而不是检索所有行,并 输出当前 cache 到内存中。

–no-create-info:不要创建 create table 语句。

–extended-insert:使用包括几个 values 列表的多行 insert 语法,这样文件更小,IO 也小,导 入数据时会非常快

–default-character-set=latin1:按照原有字符集导出数据,这样导出的文件中,所有中文都是可 见的,不会保存成乱码。

  1. 打开 bookdata.sql 将 SET NAME latin1 修改成 SET NAME utf8
    [root@huaxinfeng63 ~]# vim bookdata.sql
    改:10 /*!40101 SET NAMES latin1 /;
    为:10 /
    !40101 SET NAMES utf8 */;

  2. 重新建库

[root@huaxinfeng63 ~]# mysql -u root -p123
mysql> drop database book;
mysql> create database book default charset utf8;
mysql> exit
  1. 建立表,导入我们之前导出的表的数据库
[root@huaxinfeng63 ~]# mysql -u root -p123 book <booktable.sql
  1. 导入数据
[root@huaxinfeng63 ~]# mysql -u root -p123 book<bookdata.sql

注意:选择目标字符集时,要注意最好大于等于原字符集(字库更大),否则可能会丢失不被支持 的数据。

如果对你有帮助给我点个赞吧谢谢了。

发布了7 篇原创文章 · 获赞 89 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/BryantJamesHua/article/details/104126802