当前位置: 首页 > news >正文

jcalaBlog 数据库初始化实战:3 步解决 MySQL 中文乱码难题

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/jcalaBlog

jcalaBlog 的数据库初始化脚本都集中在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.sqldata: classpath:data.sqlinitialize: 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 中要写成&,项目里已经处理好了。

如果你的密码等参数需要调整,只改usernamepassword即可,URL 部分建议保持原样。

第三步:修改 MySQL 服务端字符集,根治中文乱码

前两步解决的是"表和连接"的问题,最后一步也是最容易忽略的——MySQL 服务端的默认字符集。如果 MySQL 实例默认字符集不是 UTF-8,那么新建的数据库和表可能悄悄继承 latin1,中文照样乱码。

针对 Linux 环境,官方推荐的终极解决方案是修改 MySQL 配置文件:

  1. 编辑配置文件:
vim /etc/mysql/my.cnf
  1. [mysqld]段落下添加一行:
[mysqld] character-set-server=utf8
  1. 重启 MySQL 服务使配置生效:
service mysql restart

搞定!之后无论是手动执行 import.sql,还是让 Spring Boot 自动初始化,所有中文都能正常存取。

如果你用的是项目自带的 docker-compose.yml 启动 MySQL 容器,同样可以把上述配置挂载进容器,实现容器化环境的字符集统一。

验证成果:3 招快速检查 jcalaBlog 中文是否正常

完成上面 3 步后,怎么确认问题真的解决了?按下面的清单快速验证:

  1. 查看表结构:执行SHOW CREATE TABLE blog_view;,确认表声明中包含CHARSET=utf8
  2. 检查全局字符集:执行SHOW VARIABLES LIKE 'character_set%';,确认character_set_serverutf8
  3. 功能实测:启动 jcalaBlog,用初始账号admin/admin登录后台(见 README.md),新建一篇带中文标题的文章并发布,前台能正常显示即为成功。

小结

回顾一下,jcalaBlog 数据库初始化的中文乱码难题,本质就是"表字符集 + 连接字符集 + 服务端字符集"三处是否统一为 UTF-8。只要按本文的 3 步走:

  1. 执行建表与初始化脚本(import.sql + data.sql);
  2. 确认 JDBC 连接串携带useUnicode:true&characterEncoding:UTF-8
  3. 在 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),仅供参考

http://www.cnnetsun.cn/news/4138108.html

相关文章:

  • jcalaBlog 文件上传功能实现:时间戳命名与年月分目录的优雅设计
  • 如何用 SwiftyPickerPopover 自定义 Storyboard:打造专属弹出选择器外观
  • WarcraftHelper 快速上手:帧数解锁、宽屏适配与界面修复的 4 个场景配置及避坑完整指南
  • PodcastCopilot源码解析:dalle_helper.py如何优雅封装Azure OpenAI的DALL-E接口?
  • KD_Lib量化三部曲(一):动态量化,3行代码让模型体积减半
  • 将 Cloudprober 指标接入 AWS CloudWatch 与 Google Cloud Monitoring
  • 用 Vanity 定义 A/B 测试:手把手写出实验定义与转化追踪的完整教程
  • 5分钟快速上手 Blazored.FluentValidation:Blazor 表单校验入门教程
  • Vanity 测试技巧:用 chooses 方法编写可复现的 A/B 测试用例
  • WarcraftHelper 教程:让魔兽 3 跑满 300 帧
  • 验证器藏在哪里?深入解析 Blazored.FluentValidation 的 DI 注册与程序集扫描机制
  • djangochannelsrestframework ObserverModelInstanceMixin:订阅单个模型实例变化的完整教程
  • gradle-docker 安装与配置全攻略:buildscript 依赖引入到插件扩展项详解
  • 线性规划实战:从数学建模到Python求解的完整指南
  • Stripe支付集成实战:从API原理到生产环境最佳实践
  • 如何为 BMW-YOLOv4-Training-Automation 准备数据集:YOLO 标注格式完整指南(附示例数据集解析)
  • Seraphine:英雄联盟战绩查询与自动 BP 工具
  • IDM下载加速不失效:开源脚本冻结试用期的完整实战指南
  • RVC语音变声完整指南:用10分钟语音数据训练专属AI音色的全流程实战
  • 【单片机毕设案例分享】基于 STM32 的人体心率血氧体温采集终端系统开发 基于 STM32 的便携式智能健康预警监测器设计(013204)
  • 从“振兴杯”云计算运维赛看企业级云平台实战技能体系构建
  • 经典游戏兼容性修复指南:dxwrapper 为老游戏搭起通往 Windows 11 的桥
  • Shotlooter完全指南:这款开源截图敏感数据嗅探工具如何一步步暴露你的隐私
  • 从光盘到镜像:WinCDEmu免费开源虚拟光驱的5步上手指南
  • 典型相关分析(CCA)实战:从原理到Python实现,揭示多维变量组深层关联
  • 微信防撤回终极指南:RevokeMsgPatcher 一键补丁,撤回的消息从此赖着不走
  • 在 React/Vue 项目中集成 d3-delaunay:工程化实践与 API 速查手册
  • 如何用 cookie_crimes 导出 Cookies 配合 EditThisCookie 一键登录网站
  • Coding-Flashcards 快速上手:5分钟导入1000+张Anki闪卡,开启高效编程学习
  • Kiwix CoreKiwix框架揭秘:libkiwix与libzim核心库深度解析