docker部署的mysql容器数据插入中文乱码问题及其衍生问题

2023-11-06

docker部署的mysql容器数据插入中文乱码问题及其衍生问题

前言:笔者使用的mysql时部署在docker容器中的,版本是5.5
部分内容参考了
https://blog.csdn.net/weixin_42168191/article/details/103159920?utm_medium=distribute.pc_relevant.none-task-blog-title-7&spm=1001.2101.3001.4242A往复随安
https://www.cnblogs.com/tian874540961/p/12133469.html --健人雄
遇到的问题:中文数据的入参接收是没有问题的,在写入数据库的时候乱码了
在这里插入图片描述

经排查,发现docker拉取部署的mysql,客户端与连接默认都是latin1
在这里插入图片描述

解决方案:
1.先解决外部访问乱码问题
由于使用的docker部署,需要先进入mysql容器内部 docker exec -it 容器id(或者容器名) /bin/bash
官方解释:
exec: Run a command in a running container(在运行的容器中运行命令)
exec -i: --interactive(相互作用的) Keep STDIN open even if not attached(即使没有连接,也要保持STDIN打开)
exec -t: --tty Allocate a pseudo-TTY(分配一个 冒充的终端设备)
进入mysql容器内部后,登陆数据库 mysql -uroot -p 输入密码
之后先查看当前的编码show variables like ‘character%’;show variables like ‘collation%’;
发现客户端与连接默认都是latin1,我们统一编码为utf8
set names ‘utf8’;这句话是设置了三个值:
set character_set_client = utf8; set character_set_results = utf8; set character_set_connection = utf8;
2.修改mysql的配置文件
退出数据库登陆,重新进入mysql容器,cd到容器的 /etc/mysql下
在这里插入图片描述

使用vim命令修改my.cnf文件,但可能会出现vim:command not found的错误,别担心,初次进入容器是这样的,没有该命令我们自己安装,执行apt-get update,更新完毕后执行apt-get install vim
现在我们可以使用vim命令了,编辑my.cnf文件 vim my.cnf,不同版本命名可能不同,你的可能叫mysqld.cnf或者xxx.cnf
笔者的my.cnf刚进去只有
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
修改为以下内容… (此处来源于网上百度,这里有坑!慎重慎重慎重!具体坑后面会填平,请先耐心往下看)
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
default-character-set = utf8(注意:这里是坑)
[mysql.server]
default-character-set = utf8
[mysqld_safe]
default-character-set = utf8
[client]
default-character-set = utf8
改完按Esc,然后输入:wq保存并退出
到这里你还是有可能会出现中文插入乱码问题,是不是心态爆炸?别急,检查一下你的jdbc url
jdbc:mysql://ip:端口/库名?useUnicode=true&characterEncoding=UTF8
jdbc蓝色部分这里需要指定一下编码跟数据库对应, 额外延伸:如果插入涉及到时间问题,还需要统一一下时区
再次测试调接口插入中文,你会发现docker部署的mysql中文乱码问题解决!
在这里插入图片描述

特别提醒:如果按照以上操作还出现中文乱码问题(虽然不太可能但万一呢?),尝试把mysql的客户端工具连接删除重新连接一下!


拓展:笔者在解决上述中文乱码问题时遇到的坑,如下
当你修改mysql的配置后,需要对mysql进行重启才能永久生效
在这里插入图片描述


但是当我进行restart操作后,mysql重启失败了,让我们查看一下日志docker logs 容器id
在这里插入图片描述

根据日志报错合理猜测时由于default-character-set = utf8导致的错误,但此时mysql容器启动不了了,就更别提进入容器内进行修改配置文件了.
解决方案如下:使用docker cp命令,把docker容器中的配置文件复制到主机中来,然后修改完再复制到docker容器中去就可以了
具体操作:
1.将docker容器内的配置文件拷贝出来 docker cp mysql:/etc/mysql/my.cnf .
注意: .代表当前目录
2.vim 修改配置文件中出错的地方 根据日志提示,删除mysqld下的未知变量 default-character-set = utf8
在这里插入图片描述

3.复制修改后的配置文件到docker容器中去 docker cp my.cnf mysql:/etc/mysql/my.cnf
4.重启容器实例 docker restart 容器id
启动成功!
在这里插入图片描述

---------这里是一个小小小的小问题---------
当你在修改my.cnf的过程中,非正常关闭会出现xxx.swp文件
在这里插入图片描述
这是由于非正常关闭导致的版本重复问题,虽然不会有什么实际影响,但每次一打开都会出现在这里插入图片描述

这个时候如果你修改完文件后,你可以使用rm删除swp文件,世界一下子就清净了
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker部署的mysql容器数据插入中文乱码问题及其衍生问题 的相关文章

  • mysql语句中的*星号是什么意思?

    Ex mysql query SELECT FROM members WHERE id id 这意味着选择表中的所有列
  • docker run -e 的环境变量

    这是我的 Dockerfile FROM ubuntu 16 04 RUN apt get update RUN apt get install y default jdk ADD sample docker 1 0 SNAPSHOT ja
  • C#:SQL 查询生成器类

    在哪里可以找到好的 SQL 查询构建器类 我只需要一个简单的类来构建 SQL 字符串 仅此而已 我需要它用于 C 和 MySql 我真的不需要像 Linq 或 NHibernate 这样的东西 谢谢 由于 Google 将我引导至此页面 我
  • MySQL 服务器未启动

    当我做 mysql u root p并输入my password这就是我得到的 错误 2002 HY000 无法通过套接字 var run mysqld mysqld sock 连接到本地 MySQL 服务器 2 所以我输入 systemc
  • PHP PDO相关:更新SQL语句未更新数据库内容

    我正在尝试使用准备好的语句来实现更新语句PHP http en wikipedia org wiki PHP脚本 但它似乎没有更新数据库中的记录 我不确定为什么 所以如果您能分享一些见解 我将不胜感激 Code query UPDATE D
  • 将记录分成两列

    我的数据库中有一个 学生 表 其中包含大约 5 000 条记录 我想将这些记录显示在two分区 如何在不执行查询两次的情况下做到这一点 仅使用单个查询 显示示例http www freeimagehosting net uploads f1
  • 社交应用程序的数据库设计和优化注意事项

    通常的情况 我有一个简单的应用程序 允许人们上传照片并关注其他人 因此 每个用户都会有类似 墙 或 活动源 的东西 他或她可以在其中看到他 她的朋友 他或她关注的人 上传的最新照片 大多数功能都很容易实现 然而 当涉及到这个历史活动源时 由
  • 当“修复表”查询在 mysql 中不起作用时该怎么办?

    我收到此错误 表的存储引擎不支持修复 当我尝试使用查询修复表时repair table tbl college master 表是 innodb 类型 但我不知道我收到此错误 See 手册 http dev mysql com doc re
  • 为什么 MySQL 创建带有 _seq 后缀的表?

    我创建了一个 InnoDB 表 名为foo在 MySQL 中 一旦我对表执行插入操作 我就会看到另一个表foo seq被建造 如果我删除自动生成的表 它会在下一次插入后出现 是什么原因造成的 听起来像是正在创建一个序列 您是否有自动生成的主
  • Python:如何使用生成器来避免 sql 内存问题

    我有以下方法来访问 mysql 数据库 并且查询在服务器中执行 我无权更改有关增加内存的任何内容 我对生成器很陌生 并开始阅读更多有关它的内容 并认为我可以将其转换为使用生成器 def getUNames self globalUserQu
  • 如何使用 MySQL 的 LOAD DATA LOCAL INFILE 在导入 CSV 时将字符串日期更改为 MySQL 日期格式

    我正在使用 MySQL 的 LOAD DATA LOCAL INFILE SQL 语句将数据从 CSV 文件加载到现有数据库表中 下面是一个 SQL 语句示例 LOAD DATA LOCAL INFILE file csv INTO TAB
  • 如何在 Laravel 查询中使用多个 OR,AND 条件

    我需要 Laravel 查询帮助 我的自定义查询 返回正确结果 Select FROM events WHERE status 0 AND type public or type private 如何写这个查询Laravel Event w
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • MySQL 使用 ALTER IGNORE TABLE 出现重复错误

    我的 MySQL 中有一个有重复项的表 我尝试删除重复项并保留一项 我没有主键 我可以通过以下方式找到重复项 select user id server id count as NumDuplicates from user server
  • docker build 如何知道 Dockerfile RUN 或 COPY 行是否可以使用缓存?

    如果我的 Python 项目的 Dockerfile 如下所示 FROM python 3 7 Set env variables ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 S
  • 如何在Sequelize中设置查询超时?

    我想看看如何在 Sequelize 中设置查询的超时时间 我查看了 Sequelize 文档以获取一些信息 但我找不到我要找的东西 我发现的最接近的是 pools acquire 选项 但我不想设置传入连接的超时 而是设置正在进行的查询的超
  • 在没有 noexec 选项的情况下将卷挂载到 docker 容器中

    据我所知 docker 也包括 docker compose 使用 noexec 选项将卷安装到容器中 因此我无法从安装的目录中启动任何程序 services app build context dockerfile Dockerfile
  • 经常提交 docker 容器是一个好习惯吗?

    我在里面使用WebSphere Liberty 由于 WebSphere Liberty 需要频繁的 xml 编辑 这对于 Dockerfile 命令来说是不可能的 我必须不时地对容器进行 docker commit 以便其他人可以使用我的
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c

随机推荐

  • Jmeter数据驱动执行无反应

    一 问题 按照网上教程编写数据驱动文件后进行执行时 察看结果树无任何反应和提示 PS excel中params参数可以用 进行连接 二 进入菜单栏 选项 gt 日志查看打钩 查询到如下log信息 2021 07 06 16 06 21 98
  • 使用Charles进行HTTPS抓包及常见问题

    Charles下载地址 https www charlesproxy com download 第一步 配置HTTP代理 设置代理 主界面 Proxy Proxy Settings 选择在8888端口上监听 然后确定 勾选了SOCKS pr
  • HTML DOM Document对象

    HTML DOM 节点 在 HTML DOM Document Object Model 中 每一个元素都是 节点 文档是一个文档节点 所有的HTML元素都是元素节点 所有 HTML 属性都是属性节点 文本插入到 HTML 元素是文本节点
  • Spring事务UnexpectedRollbackException异常抛出原因深度分析及解决方案

    Transaction rolled back because it has been marked as rollback only 中文翻译为 事务已回滚 因为它被标记成了只回滚 这个异常 相信写代码多年的大家 都遇到过 什么原因呢 今
  • 常见漏洞细细分类

    从提交列表中整理了一份 常见漏洞细细分类 腾讯安全应急响应中心 Web漏洞 普通反射型XSS 存储型XSS 基于DOM的XSS 基于Flash的XSS 命令注入 SQL注入 上传漏洞 信息泄漏 SSRF漏洞 读类型CSRF 写类型CSRF
  • CentOS7安装MySQL8

    文章目录 一 前言 二 Centos 7 安装 mysql8 步骤 1 下载MySQL官方的 Yum Repository 2 安装 方法一 用wget 下载后安装 方法二 下载 RMP 软件包将该软件包上传到 Linux 服务器 并安装
  • html 微信声音自动播放 和 滑动屏幕播放

    html 微信声音自动播放 和 滑动屏幕播放
  • 【Flutter 2-3】Flutter手把手教程UI布局和Widget——容器控件Container

    作者 弗拉德 来源 弗拉德 公众号 fulade me Container 我们先来看一下Container初始化的参数 Container Key key 位置 居左 居右 居中 this alignment EdgeInsets Con
  • C++的std::vector<bool>转储文件

    文章目录 前言 获取数据源地址 MSVC GCC 数据地址获取方法 结果 总结 前言 总所周知 C 的std vector
  • Mac 双系统之windows坏了咋办

    1 背景 Mac mini 装了个双系统 windows 系统太慢 准备重装 本来想着直接恢复出厂 结果根本不能这么操作 由于默认启动盘设置的是windows系统 然后就出现了 起不来的情况 其实之前也遇到过 就是忘了 折腾了好久这里记录一
  • React-router导入Link报错

    按以下导入 出现 Link is not exported from react router 错误 import Router Route Link from react router 解决方案 yarn add react router
  • Python音视频开发:消除抖音短视频Logo的图形化工具实现过程详解

    前往老猿Python博文目录 一 引言 在 Python音视频开发 消除抖音短视频Logo和去电视台标的实现详解 节介绍了怎么通过Python Moviepy OpenCV实现消除视频Logo的四种方法 并提供了详细的实现思路和实现代码 但
  • Kitti Stereo dataset 2015

    发现国内很多人分享kitti目标检测数据集 但少有分享立体匹配数据集的朋友 所以特做此分享 下载链接 2015 https s3 eu central 1 amazonaws com avg kitti data scene flow zi
  • 立创3D导入AD+AD的板子颜色改变

    立创3D导入AD AD的板子颜色改变 文章目录 立创3D导入AD AD的板子颜色改变 介绍 结果图展示 环境情况 3D板子换颜色 3D模型的寻找 3D模型的导入 总结 介绍 AD中默认的绿色板子一点逼格都没有 还缺了很多3D封装 想美化下
  • 提交form表单 报错:POST http://localhost:8080/user/login 404 原因及解决方法

    原因 1 input没有设置name属性 jquery获取不到 更新 文章里边举得例子 稍微有点不恰当 button 千万不要用input标签 要不然servlet就会从它上获取数据 结果还会报错 报这种错误 说明jquery库中的方法 运
  • 前端的对决:React的JSX与Vue的templates

    请点击此处输入图片描述 React js和Vue js是这个星球上最流行的JavaScript库 它们都很强大 相对来说很容易获取和使用 React和Vue的共性 使用虚拟DOM 提供响应式视图组件 专注于开发过程中的一个方面 目前集中在视
  • 因为git忽略大小写而浪费的一天一夜修复bug

    改了多语言文件名 将小写改为大写 vite项目重新发布后 测试环境报找不到这个文件的错误 心路历程分析 1 第一反应是缓存问题 后清除浏览器缓存 vite项目版本号改动 强制清除vite包缓存 使用 force命令 报错 需要再研究一下 都
  • 【刷题笔记】——day.4 路径问题总结

    学习目标 用于记录每日刷的题目为了明年的python组蓝桥杯做准备 今天是打卡的第四天 冲 原题一 不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 问总共有多
  • Windows IntelliJ IDEA 快捷键终极大全

    目录 自动代码 查询快捷键 其他快捷键 调试快捷键 重构 十大Intellij IDEA快捷键 1 智能提示 2 重构 3 代码生成 4 编辑 5 查找打开 6 其他辅助 太难割舍 前三名并列吧 自动代码 常用的有fori sout psv
  • docker部署的mysql容器数据插入中文乱码问题及其衍生问题

    docker部署的mysql容器数据插入中文乱码问题及其衍生问题 前言 笔者使用的mysql时部署在docker容器中的 版本是5 5部分内容参考了https blog csdn net weixin 42168191 article de