Mysql创建视图中文乱码修改docker里的配置

文章讲述了作者在MySQL视图查询中遇到中文变为乱码的问题,发现是由于character_set_server配置错误。通过设置character_set_server为UTF-8并修改Docker容器内的my.cnf配置,最终解决了问题。

问题现象:

创建的视图查询无数据,查看创建语句得知,where条件里的中文变成了“???”。
在这里插入图片描述
在客户端里查询字符编码:

show VARIABLES like '%char%';

在这里插入图片描述
就是character_set_server导致的,它配置的竟然不是utf8,因为他默认就是这个latin1!
踩坑记录:
我在客户端写了个这个命令:

set  character_set_server ='utf8';

表面上再次查询编码确实是变成utf8了,实际上根本不起作用,重启mysql服务也不会起作用!
解决办法:
我的这个mysql是用docker启动的,所以先登录服务器,找到容器

docker ps -a

在这里插入图片描述
温馨提示(踩坑记录):注意要加-a查询所有的容器,要不然如果容器Exited状态就查不到它了,比如:
在这里插入图片描述

进入容器里,修改my.cnf文件

备注:Windows系统里的mysql,其配置文件叫做my.ini;Linux系统里的mysql,其配置文件叫做my.cnf,一般存放在 /etc/my.cnf或者/etc/mysql/my.cnf路径下。

docker exec -it 2654b151f48c /bin/bash

在这里插入图片描述
踩坑记录:一定要加上-it ,要不然没法进入容器,继续操作可就是服务器上的文件了(我这样干过,还疑惑为啥重启不生效,(ˉ▽ˉ;)…)

修改my.cnf文件,在[mysqld]下方加上配置:

character_set_server=utf8
init_connect='SET NAMES utf8'

划重点:一定要在[mysqld]下方加,要不然可能不会生效!
原因:配置文件中的启动选项被划分为若干个组,每个组有一个组名,用中括号[]扩起来。
参考文章:mysql配置文件的使用

踩坑记录:
因为容器里没有vim和vi命令,突发奇想使用了echo 命令直接往文件后面追加,也没有注意到没放在[mysqld]组下面,所以重启后配置一直不生效。

使用echo命令的话:

echo "xxx" >> a.txt ——把xxx追加到a.txt文件最后面
echo "xxx" > a.txt ——把xxx覆盖到a.txt文件里

所以最后意识到以后,使用了>才得以纠正。

重启mysql服务
我使用的是docker命令重启的服务,主从服务器分别重启:
在这里插入图片描述
再次用客户端查看编码,已经是utf8了,服务上创建的视图也没有出现乱码情况:
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值