mysql 字符 乱码问题,MySQL 字符集,乱码等问题解决

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的家目录下面

4074cdc42f961f7d42bc6e2f2922285a.png

[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 ‘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 数据字符串的存储方式,而校对规则定义比较字符串的方式

061f494c92a3dbc4770afba9bd9dd7f2.png

MySQL 怎样选择合适的字符集

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

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

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

查看当前 MySQL 支持的字符集

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

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

f3f39d82ac34c408dbab65f4b2be97ad.png

这就是mysql支持的字符集 注:/G是以横向格式输出

查看常用的字符集:

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

ee2ca96eea946267438e7de539bb09e4.png

查看 MySQL 当前的字符集设置情况

[root@huaxinfeng63 ~]# mysql -uroot -p123

mysql> show variables like ‘character_set%’;

03052fe8c3e08ba8269a362484475448.png

修改 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%';

03001af385d544820802ac820ab73097.png

实验

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

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

步骤

(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

编辑 booktable.sql 将 latin1 修改成 utf8

[root@huaxinfeng63 ~]# vim booktable.sql #修改所有 latin1 为 utf8

在 vim 未行模式下 :%s/latin1/utf8/g 全文查找 latin1 并替换为 utf8。

确保数据库不再更新,导出所有数据

[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:按照原有字符集导出数据,这样导出的文件中,所有中文都是可 见的,不会保存成乱码。

打开 bookdata.sql 将 SET NAME latin1 修改成 SET NAME utf8

[root@huaxinfeng63 ~]# vim bookdata.sql

改:10 /*!40101 SET NAMES latin1 /;

为:10 /!40101 SET NAMES utf8 */;

重新建库

[root@huaxinfeng63 ~]# mysql -u root -p123

mysql> drop database book;

mysql> create database book default charset utf8;

mysql> exit

建立表,导入我们之前导出的表的数据库

[root@huaxinfeng63 ~]# mysql -u root -p123 book

导入数据

[root@huaxinfeng63 ~]# mysql -u root -p123 book

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

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

5c769d5010459428d7ee0e596317cf4e.png

de638df49f1d5a3342eecff86bcb011e.png

Bryant James

发布了5 篇原创文章 · 获赞 52 · 访问量 1万+

私信

关注

标签:utf8,huaxinfeng63,MySQL,字符集,乱码,mysql,root

来源: https://blog.csdn.net/BryantJamesHua/article/details/104126802

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值