Docker下的mysql设置字符集

本文介绍如何通过设置MySQL容器的字符集参数解决Springboot应用访问数据库时出现的字符集异常问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mysql的官方镜像mysql:8,可用以下命令启动容器:

docker run --name mysql002 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=888888 -idt mysql:8

如果用Springboot的JPA starter访问此数据库,由于数据库没有设置字符集,springboot应用会抛出以下异常:

java.sql.SQLException: Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
	at com.mysql.jdbc.ConnectionImpl.configureClientCharacterSet(ConnectionImpl.java:1794)
	at 
	......
	...
	.


关键信息是这一行:Unknown initial character set index ‘255’ received from server

由于没有设置字符集导致获取server charset失败,可以使用以下启动命令来创建容器并设置字符集参数:

docker run --name mysql005 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=888888 -idt mysql:8 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

和之前创建容器的命令相比,多了两个参数–character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci,这样mysql容器就设置好字符集了,再次启动springboot应用操作数据库,一切正常;

欢迎关注我的公众号:程序员欣宸

在这里插入图片描述

### 如何在 Docker 中安装 MySQL设置其自动启动 要在 Docker 中安装 MySQL 并将其配置为开机自动启动,可以按照以下方式操作: #### 1. 安装 DockerMySQL 确保已正确安装 Docker。如果尚未安装,请先完成 Docker 的安装过程。 通过运行以下命令来拉取官方的 MySQL 镜像: ```bash docker pull mysql:latest ``` 创建并启动一个新的 MySQL 容器时,可以通过 `--restart` 参数指定容器的重启策略[^4]。例如,使用 `unless-stopped` 策略表示除非手动停止该容器,否则它将在系统重新启动后自动启动。 ```bash docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d --restart unless-stopped mysql:latest ``` #### 2. 对于已有容器启用自动启动 如果已经有一个正在运行的 MySQL 容器,则可以直接更新它的重启策略以实现自动启动功能: ```bash docker update --restart unless-stopped my-mysql ``` #### 3. 设置 Docker 自身的开机自启 (适用于 Linux) 为了使上述设置生效,还需要保证 Docker 服务本身能够在操作系统启动时被激活。这通常涉及对系统的初始化脚本进行调整。对于基于 systemd 的发行版(如 Ubuntu),可执行如下命令来启用 Docker 的开机自启[^3]: ```bash systemctl enable docker ``` #### 4. 进一步优化与安全措施 - **端口映射**: 若要让外部设备能够访问此数据库实例,记得将主机上的某个端口号绑定至容器内部的服务端口(默认情况下为3306)[^3]。例如,在启动新容器的时候加入 `-p 3306:3306` 参数。 - **字符集设定**: 推荐进入 MySQL 控制台并通过 SQL 命令更改客户端和服务端之间的通信编码格式为 UTF-8 ,从而避免因区域差异引发的数据乱码现象 。 可采用单条语句形式简化处理流程:`SET NAMES 'utf8';`. --- ### 示例代码片段 以下是完整的示例脚本用于快速部署具有持久化存储支持以及适当参数配置的一个 MySQL 实例,并且设置了合理的重启行为: ```bash #!/bin/bash # 创建数据卷目录 mkdir -p /data/mysql # 启动带持久化的 MySQL 容器 docker run \ --name=mysql-server \ -v /data/mysql:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=rootpasswordhere \ -p 3306:3306 \ --restart=always \ -d mysql:latest ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员欣宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值