docker mysql 中文乱码

发布时间 - 2023-05-13 00:00:00    点击率:

在使用docker容器部署mysql数据库时,有时会出现中文乱码的情况。这是因为mysql默认字符集为latin1,而中文字符需要使用utf-8编码。本文将介绍如何解决docker mysql中文乱码问题。

一、查看当前MySQL字符集

首先,我们需要查看当前MySQL的字符集。可以通过登录到MySQL后使用以下命令:

mysql> show variables like '%char%';

其中,字符集相关的变量有:

  • character_set_client:客户端字符集,也就是连接MySQL的客户端所使用的字符集;
  • character_set_connection:连接字符集,也就是服务器与客户端之间的字符集;
  • character_set_database:数据库字符集,新创建的数据库会按此字符集创建;
  • character_set_results:结果字符集,SELECT查询返回的结果所使用的字符集;
  • character_set_server:服务器字符集,MySQL服务器本身所使用的字符集。

二、修改MySQL字符集为UTF-8

查看到当前MySQL字符集为Latin1后,我们需要修改为UTF-8。可以通过以下两种方式实现:

  1. 修改MySQL配置文件

在MySQL配置文件中(通常是/etc/my.cnf或/etc/mysql/my.cnf),添加以下两行内容:

[client]
default-character-set=utf8

[mysqld]
character-set-server=utf8

其中,[client]用于设置客户端字符集为UTF-8,[mysqld]用于设置服务器字符集为UTF-8。修改完成后重启MySQL服务:

sudo service mysql restart
  1. 连接MySQL后修改字符集

如果无法修改MySQL配置文件,可以在连接MySQL后手动修改字符集。可以通过以下命令连接到MySQL:

mysql --default-character-set=utf8 -u用户名 -p密码 数据库名

连接成功后,依次执行以下命令修改字符集:

SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;
SET character_set_server = utf8;

修改完成后,退出MySQL,再次登录即可生效。

三、在Docker容器中使用UTF-8字符集

由于Docker容器中的MySQL是基于镜像运行的,因此我们需要在镜像中设置UTF-8字符集。可以通过以下Dockerfile来构建MySQL镜像:

FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD=root
ENV MYSQL_DATABASE=test
ENV MYSQL_CHARSET=utf8
ENV MYSQL_COLLATION=utf8_general_ci
COPY ./init.sql /docker-entrypoint-initdb.d/

其中,ENV命令用于设置环境变量,MYSQL_CHARSET用于设置MySQL字符集为UTF-8,MYSQL_COLLATION用于设置排序规则为utf8_general_ci。这里还通过COPY命令将初始化脚本init.sql复制到镜像中,用于在启动容器时自动执行。

四、总结

通过以上三个步骤,我们可以在Docker容器中使用MySQL,并且设置字符集为UTF-8,避免中文乱码的问题。当然,如果需要处理多语言字符集,还需根据具体情况进行调整。希望该文章能对大家有所帮助。


# sql  # mysql  # select  # copy  # docker  # 数据库  # 可以通过  # 镜像  # 客户端  # 配置文件  # 完成后  # 两种  # 我们可以  # 重启  # 这是因为  # 能对 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Bootstrap CSS布局之列表  大同网页,大同瑞慈医院官网?  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  制作公司内部网站有哪些,内网如何建网站?  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  iOS中将个别页面强制横屏其他页面竖屏  如何选择PHP开源工具快速搭建网站?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Laravel怎么为数据库表字段添加索引以优化查询  如何用花生壳三步快速搭建专属网站?  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  如何在Windows 2008云服务器安全搭建网站?  使用豆包 AI 辅助进行简单网页 HTML 结构设计  网站建设保证美观性,需要考虑的几点问题!  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Laravel如何使用查询构建器?(Query Builder高级用法)  googleplay官方入口在哪里_Google Play官方商店快速入口指南  Python图片处理进阶教程_Pillow滤镜与图像增强  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  js实现点击每个li节点,都弹出其文本值及修改  如何用5美元大硬盘VPS安全高效搭建个人网站?  使用Dockerfile构建java web环境  ,南京靠谱的征婚网站?  js代码实现下拉菜单【推荐】  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Python正则表达式进阶教程_复杂匹配与分组替换解析  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  iOS正则表达式验证手机号、邮箱、身份证号等  如何在不使用负向后查找的情况下匹配特定条件前的换行符  怎么用AI帮你为初创公司进行市场定位分析?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  简单实现Android验证码  如何快速生成橙子建站落地页链接?  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  网站页面设计需要考虑到这些问题  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  使用spring连接及操作mongodb3.0实例  北京的网站制作公司有哪些,哪个视频网站最好?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  如何基于PHP生成高效IDC网络公司建站源码?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  WordPress 子目录安装中正确处理脚本路径的完整指南  如何在IIS中新建站点并配置端口与物理路径?  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  如何构建满足综合性能需求的优质建站方案?  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法