jcalaBlog 数据库初始化实战:3 步解决 MySQL 中文乱码难题
【免费下载链接】jcalaBloga personal blog site based on springboot+srpingMVC+mybatis+velocity+bootstrap+mysql项目地址: https://gitcode.com/gh_mirrors/jc/jcalaBlog
jcalaBlog 是一款基于 Spring Boot + Spring MVC + MyBatis + Velocity + Bootstrap + MySQL 构建的开源个人博客网站,尤其适合新手作为第一个 Spring Boot 实战项目来学习和部署。不过,很多刚接触它的开发者在 jcalaBlog 数据库初始化阶段都会遇到同一个拦路虎——MySQL 中文乱码。今天这篇实战教程就带你用 3 步搞定数据库初始化,并彻底告别乱码,顺利跑起属于自己的个人博客。
为什么 jcalaBlog 数据库初始化会中文乱码?
在动手之前,先花 1 分钟搞懂乱码的根源,这样才能对症下药。中文乱码的本质是字符集不统一:MySQL 服务端默认字符集、数据库表的字符集、JDBC 连接参数三者只要有一个不是 UTF-8,中文就会变成乱码。
在 jcalaBlog 项目中,这个问题有非常典型的体现——官方 README.md 的注意事项第一条就专门提到了它,可见踩坑的人不在少数。好消息是,解决方案并不复杂,只需按下面 3 步执行即可。
第一步:一键完成 jcalaBlog 数据库建表与初始化
首先把项目克隆到本地:
git clone https://gitcode.com/gh_mirrors/jc/jcalaBlogjcalaBlog 的数据库初始化脚本都集中在src/main/resources目录下,我们只需关注两个核心文件:
- import.sql:建表脚本,创建
admin(管理员)、blog_view(博客文章)、project(项目)、view_tag(标签)四张核心表; - data.sql:初始数据,预置了后台账号
admin和几篇示例博客。
这里有个关键细节:建表脚本里已经显式声明了DEFAULT CHARSET=utf8(见 import.sql),保证表结构层面的中文存储没有问题。
你可以用任意 MySQL 客户端执行这两个脚本,也可以让 Spring Boot 自动完成。项目默认的开发配置已经开启了自动初始化:
- application-dev.yml 中
schema: classpath:import.sql、data: classpath:data.sql、initialize: true,应用启动时会自动建表并导入数据,超级省心; - 生产环境 application-prod.yml 中
initialize: false,建议手动执行脚本,避免重复初始化。
第二步:修改 JDBC 连接串,解决连接层中文乱码
数据库和表都建好了,乱码往往就出在应用与 MySQL 的"对话"环节。Spring Boot 应用通过 JDBC 连接 MySQL 时,如果连接串里没有声明 UTF-8 编码,双方就会各说各话,写入的中文自然变成乱码。
jcalaBlog 的官方配置已经为我们写好了标准答案,在 application-dev.yml 和 application-prod.yml 的数据源配置中可以看到:
url: jdbc:mysql://127.0.0.1:3306/jcala_blog?useUnicode:true&characterEncoding:UTF-8核心就是两个参数:
useUnicode:true:启用 Unicode 编码支持;characterEncoding:UTF-8:指定使用 UTF-8 字符集与数据库通信。
⚠️ 新手最容易踩的坑:很多教程里写的是
useUnicode=true,但 Spring Boot 的 yml 配置中布尔值用冒号分隔(即useUnicode:true),如果照搬=的写法会导致参数不生效,进而引发中文乱码。另外连接串中的&在 yml 中要写成&,项目里已经处理好了。
如果你的密码等参数需要调整,只改username、password即可,URL 部分建议保持原样。
第三步:修改 MySQL 服务端字符集,根治中文乱码
前两步解决的是"表和连接"的问题,最后一步也是最容易忽略的——MySQL 服务端的默认字符集。如果 MySQL 实例默认字符集不是 UTF-8,那么新建的数据库和表可能悄悄继承 latin1,中文照样乱码。
针对 Linux 环境,官方推荐的终极解决方案是修改 MySQL 配置文件:
- 编辑配置文件:
vim /etc/mysql/my.cnf- 在
[mysqld]段落下添加一行:
[mysqld] character-set-server=utf8- 重启 MySQL 服务使配置生效:
service mysql restart搞定!之后无论是手动执行 import.sql,还是让 Spring Boot 自动初始化,所有中文都能正常存取。
如果你用的是项目自带的 docker-compose.yml 启动 MySQL 容器,同样可以把上述配置挂载进容器,实现容器化环境的字符集统一。
验证成果:3 招快速检查 jcalaBlog 中文是否正常
完成上面 3 步后,怎么确认问题真的解决了?按下面的清单快速验证:
- 查看表结构:执行
SHOW CREATE TABLE blog_view;,确认表声明中包含CHARSET=utf8; - 检查全局字符集:执行
SHOW VARIABLES LIKE 'character_set%';,确认character_set_server为utf8; - 功能实测:启动 jcalaBlog,用初始账号
admin/admin登录后台(见 README.md),新建一篇带中文标题的文章并发布,前台能正常显示即为成功。
小结
回顾一下,jcalaBlog 数据库初始化的中文乱码难题,本质就是"表字符集 + 连接字符集 + 服务端字符集"三处是否统一为 UTF-8。只要按本文的 3 步走:
- 执行建表与初始化脚本(import.sql + data.sql);
- 确认 JDBC 连接串携带
useUnicode:true&characterEncoding:UTF-8; - 在 MySQL 配置中设置
character-set-server=utf8。
新手也能稳稳地把 jcalaBlog 跑起来。如果你的环境还遇到其他问题,欢迎对照项目源码中的 BlogSerImpl.java 等业务代码逐步排查。祝你的博客早日上线!🎉
【免费下载链接】jcalaBloga personal blog site based on springboot+srpingMVC+mybatis+velocity+bootstrap+mysql项目地址: https://gitcode.com/gh_mirrors/jc/jcalaBlog
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考