关于mysql的编码问题

最近在本地搭个公司框架进行学习的过程中,用了mysql数据库,但是初始化出来的数据库,里面的中文全都是乱码。

检查了我建库时候设置的编码,UTF8没错啊。

现在基本断定就是mysql的默认编码没有改过来,经过验证,果然,数据库编码和服务编码仍然是默认编码

在网上百度了大半天,所有的文章都是在说,找到mysql的安装目录,在安装目录下修改my.ini的配置文件,我找到了安装目录里面的配置文件

贴上我的更改

然并卵!!!!!!!!!!!!!

不论我怎么改,数据库编码依然改不过来。研究了老半天,终于找到了问题所在。

mysql数据库的配置文件是可以指定的,既然我们修改的配置文件不管用,那可以断定默认的配置文件就不是我们修改的配置文件,那怎么找真正的配置文件呢,下面介绍两种方法。

第一,通过服务找

mysql在安装的时候会在Windows服务里注册一个服务,win+R

services.msc

找到我们对应的mysql服务,右键→属性,有个可执行文件路径,里面的--default-file后面的路径便是我们mysql使用中的配置文件的真正路径。注意,这里的ProgramData文件件是一个隐藏文件夹,在找的时候在文件夹选项中勾选显示隐藏文件/夹就OK。

在找到这个配置文件以后,在配置文件中加入以下代码

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
character-set-server=utf8

修改完以后,重启一下mysql服务,mysql的编码修改成功

第二、通过注册表找

win+R,

regedit

找到[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySql]路径,在右边有个ImagePath的选项

双击打开,里面依然是default-file的参数,就是mysql默认配置文件的路径。

顺便说一句,在注册变里可以修改这个路径,你可以建一个.ini 的配置文件,放到任何你想放的路径,然后在这里修改路径,然后重启mysql服务就OK了(最好不要出现中文路径)。

关于docker中的mysql配置文件

最近也在学习一下关于docker的东西,也就在docker中搞了一个mysql容器玩了一下,但是又发现一个悲剧的问题,编码改不过来!!!!我要疯了。

下面是我创建运行容器的代码

docker run -p 3307:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_
ROOT_PASSWORD=root -d mysql:5.7

也是百度了好多,说是先进入容器(43c9是我容器ID的前四位)

docker exec -it 43c9 bash

然后进入这个目录下

/etc/mysql/mysql.conf.d

修改mysqld.cnf的配置文件

依然是在配置文件下添加了这几项

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
default-character-set=utf8
character-set-server=utf8

但是!!!!又是没什么乱用!!而且,容器一停了,就再也启动不了了了了了了!!!!!!

多方查资料,说是因为在官方的mysql容器中,mysqld下面不支持default-character-set=utf8属性,说是改的时候不添加这个就好了。这种方法我没试。但是每次改坏一个容器,就得删了重跑。

下面贴上我的解决方案。

在我新建运行容器的时候,注意到这个配置了没

-v $PWD/conf:/etc/mysql/conf.d 

这个配置是意思就是将mysql容器/etc/mysql/conf.d下的配置文件挂载到宿主机当前路径下的conf.文件夹,那我就在这个上面做文章了。

首先,进入容器,进入容器的代码在上面,然后进入配置文件的mysql.conf.d文件夹,里面有mysqld.cnf的配置文件

cd /etc/mysql/mysql.conf.d/

然后,将配置文件复制到我run时候的映射的文件夹,下面是我的代码,然后个名字,我的是my.cnf。

cp mysqld.cnf /etc/mysql/conf.d

刚才不是说了映射到了本机的路径下么,我在本机新建一个文件夹,里面又放了三个文件夹,分别就对应着上面run里面的三个映射路径,到这一步,你就会发现你的conf文件夹里面多了一个my.cnf的配置文件了。

然后右键打开修改就可以了。这里我为了保险起见,还是吧mysqld下面的default-character-set=utf8给注释了

到这里还没结束,当你修改完的时候,启动容器,进入容器,然后你会发现

他说这个配置文件被忽略了。查了一下,是因为mysql的安全策略,这个配置文件谁都有可读写的权限,所以他被忽略了。

百度一堆说什么用chmod 644 my.cnf修改一下权限,还有什么修改docker-file的,要么没什么乱用,而我的解决办法是。

在映射的文件夹中,将my.cnf文件右键,属性,设为只读

好了,问题完美解决,新的配置文件生效了。编码终于修改过来了!!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值