记一次docker-mysql5.7乱码的完整解决过程及原因分析

        先说下背景,最近有一个项目,客户要求所有东西都使用docker来部署,总共部署了两个docker: docker-tomcat(不限版本,直接摘取最新的,下载后看到是是8.5.49)、docker-mysql(5.7.18)。

        按常规,当然是先在测试环境部署测试,在阿里云服务器上搭建两个docker, 并使用Navicat 连接到docker-mysql进行数据库初始化,完成后打开页面,一切正常,完美!

        然后,项目上线,由于客户服务器外网不通,所以将初始化的Sql脚本上传到服务器,再通过服务器终端使用source命令进行初始化。部署完成后,打开页面,乱码!!!乱码!!!,只要是从数据库查询出来的数据都是乱码~

       原因分析:这是因为数据库没有设置编码导致,有人又问那为什么测试环境没有问题呢?因为测试环境是通过Navicat来操作的,Navicat自带编码!

        下面有图为证:

         一是进入容器,登录mysql,执行show variables like 'char%';查看数据库编码如下

二是直接使用navicat连接,执行show variables like 'char%'查看,如下

由些可见,navicat是自带编码,所以测试环境通过navicat来初始化没有出现乱码。

 

解决过程

一、设置mysql编码

参考https://blog.csdn.net/u011142756/article/details/81712461

修改字MySQL字符集    vim  mysql/conf/my.cnf

添加下面代码:

[client]

default-character-set=utf8

 

[mysql]

default-character-set=utf8

 

[mysqld]

init_connect='SET collation_connection = utf8_unicode_ci'

init_connect='SET NAMES utf8'

character-set-server=utf8

collation-server=utf8_unicode_ci

skip-character-set-client-handshake

重启后,再进入容器,使用mysql -u root -p登录查看编码,可看到编码已经生效

mysql> show variables like'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

 

二、重新初始化数据库

由于之前初始化数据库时并没有设置编码,所以初始化的数据已经是乱码,可以查询表数据查看情况 ,如图

将数据库删除,然后重新初始化后,一切正常,至此docker-mysql乱码解决。

 

 

 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用docker-compose来部署MySQL 5.7,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了docker-compose并创建了所需的文件夹。在Linux上,你需要在/usr/local/geek/mysql目录下创建三个文件夹:data(用于存放数据)、conf(存放自定义配置)和log(存放日志文件)。 2. 在mysql文件夹中创建一个名为docker-compose.yml的文件,并将以下内容复制到该文件中: ``` version: '2.2' services: mysql: container_name: mysql hostname: docker-tool-mysql cpus: "2" mem_limit: "2G" environment: MYSQL_ROOT_PASSWORD: "123456" MYSQL_USER: 'zhongtao' MYSQL_PASS: '123456' image: "docker.io/mysql:5.7" restart: always volumes: - "/usr/local/geek/mysql/data:/var/lib/mysql" - "/usr/local/geek/mysql/conf/my.cnf:/etc/my.cnf" - "/usr/local/geek/mysql/log:/var/log/mysql" ports: - "3306:3306" networks: 20190116_aidata_network: ipv4_address: 81.68.172.91 networks: 20190116_aidata_network: external: true ``` 3. 保存并关闭docker-compose.yml文件。 4. 在终端中导航到docker-compose.yml所在的目录,然后运行以下命令启动MySQL容器: ``` /usr/local/geek/mysql# docker-compose up -d ``` 5. 等待一段时间,MySQL容器将会自动加载和安装。你可以使用以下命令进入MySQL容器内: ``` /usr/local/geek/mysql# docker exec -it mysql bash ``` 这样你就可以在MySQL容器中进行操作了。请注意,上述命令中的路径和参数根据你的实际情况进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [docker-compose安装mysql5.7](https://blog.csdn.net/pichcar1982/article/details/120414471)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值