# 第二阶段问题记录 ## 问题记录格式 使用双链形式连接步骤文档,例如:[[第二阶段-代码整合到RuoYi]] ## 问题列表 ### 问题1 - **关联步骤**:[[第二阶段-代码整合到RuoYi]] - **问题描述**:执行SQL脚本时出现字符编码错误 - **发生时间**:2025-11-11 - **错误信息**: - `ERROR 1366 (HY000) at line 10: Incorrect string value: '\xAE\xE5\xBD\x95' for column 'remark' at row 1` - `Process failed (exit code = 1)` - **问题原因**: 1. MySQL客户端连接的字符集设置不正确 2. SQL脚本文件可能不是UTF-8编码 3. 数据库字符集设置不正确 4. SQL脚本中的字符集设置语句在注释块中,可能没有正确执行 - **解决方案**: 1. 在SQL脚本开头添加显式的字符集设置(在注释块之前): ```sql SET NAMES utf8mb4; SET CHARACTER_SET_CLIENT = utf8mb4; SET CHARACTER_SET_CONNECTION = utf8mb4; SET CHARACTER_SET_RESULTS = utf8mb4; ``` 2. 确保数据库创建时使用utf8mb4字符集 3. 确保SQL文件保存为UTF-8编码(无BOM) 4. 在DBeaver等工具中执行SQL时,确保连接字符集设置为utf8mb4 5. 创建数据库初始化脚本 `ry_study_init_database.sql` 用于正确创建数据库 - **相关文件**: - `log/Sql/ry_study_init_database.sql` - 数据库初始化脚本 - `log/Sql/ry_news_2025-10-31_16-51-20_mysql_data_G7xyv.sql` - 已添加字符集设置 - `log/Sql/ry_study_menu_study_system.sql` - 已添加字符集设置 - **状态**:已解决 ### 验证结果 执行字符集验证命令后,确认所有关键字符集都已正确设置为utf8mb4: - `character_set_client`: utf8mb4 ✅ - `character_set_connection`: utf8mb4 ✅ - `character_set_database`: utf8mb4 ✅ - `character_set_results`: utf8mb4 ✅ - `character_set_server`: utf8mb4 ✅ - `collation_database`: utf8mb4_general_ci ✅ **结论**:字符集配置正确,可以正常执行SQL脚本。 ### 问题2 - **关联步骤**:[[第二阶段-代码整合到RuoYi]] - **问题描述**:编译错误 - 缺少导入和依赖 - **发生时间**:2025-11-11 - **错误信息**: - `java: 找不到符号 - HttpServletRequest` - `java: 程序包org.springframework.web.socket.server.standard不存在` - `java: 找不到符号 - ServerEndpointExporter` - `java: 未知的枚举常量 javax.annotation.meta.When.MAYBE` - **问题原因**: 1. `StudyScreenMonitorController` 中使用了 `HttpServletRequest` 但缺少导入 2. WebSocket配置类使用了 `ServerEndpointExporter`,但缺少 `spring-boot-starter-websocket` 依赖 3. `javax.annotation.meta.When.MAYBE` 错误可能是IDE或编译器的警告,不影响实际运行 - **解决方案**: 1. 在 `StudyScreenMonitorController.java` 中添加导入: ```java import javax.servlet.http.HttpServletRequest; ``` 2. 在 `ry-news-admin/pom.xml` 中添加WebSocket依赖: ```xml org.springframework.boot spring-boot-starter-websocket ``` 3. 重新编译项目:`mvn clean install` - **相关文件**: - `RuoYi-Vue-redis/ry-news-admin/src/main/java/com/ddnai/web/controller/study/StudyScreenMonitorController.java` - 已添加HttpServletRequest导入 - `RuoYi-Vue-redis/ry-news-admin/pom.xml` - 已添加WebSocket依赖 - `RuoYi-Vue-redis/ry-news-admin/src/main/java/com/ddnai/web/config/WebSocketConfig.java` - WebSocket配置类 - **状态**:已解决 ### 问题3 - **关联步骤**:[[第二阶段-代码整合到RuoYi]] - **问题描述**:Redis连接失败 - 无法连接到Redis服务器 - **发生时间**:2025-11-11 - **错误信息**: - `Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 127.0.0.1:6379` - `ERR Client sent AUTH, but no password is set` - 客户端发送了AUTH认证,但Redis服务器没有设置密码 - **问题原因**: 1. Redis服务可能没有启动 2. 应用配置了Redis密码,但本地Redis服务器没有设置密码 3. Redis密码配置不匹配 - **解决方案**: **方案A:如果本地Redis没有密码(推荐开发环境)** 1. 打开 `RuoYi-Vue-redis/ry-news-admin/src/main/resources/application.yml` 2. 注释掉或删除Redis密码配置: ```yaml spring: redis: host: 127.0.0.1 port: 6379 database: 0 # password: xbZttkmndxCkWsycjs2 # 注释掉密码 password: # 或者设置为空 ``` **方案B:如果Redis有密码** 1. 确保Redis服务已启动 2. 检查Redis密码是否正确 3. 确保配置文件中的密码与Redis服务器密码一致 **方案C:启动Redis服务(如果未启动)** - Windows: 运行Redis服务或使用Docker启动 - Linux: `sudo systemctl start redis` 或 `redis-server` - 检查Redis是否运行: `redis-cli ping`(应该返回 `PONG`) **方案D:临时禁用Redis(仅用于测试,不推荐)** - 如果暂时不需要Redis功能,可以注释掉Redis相关配置 - 但RuoYi的缓存和会话管理依赖Redis,建议启动Redis服务 - **相关文件**: - `RuoYi-Vue-redis/ry-news-admin/src/main/resources/application.yml` - Redis配置 - **状态**:已解决 **实际解决**: - 确认Redis服务正常运行且没有密码 - 在 `application.yml` 中注释掉 `password: xbZttkmndxCkWsycjs2` 配置 - 重新启动后端服务,Redis连接成功 ### 问题4 - **关联步骤**:[[第二阶段-代码整合到RuoYi]] - **问题描述**:数据库表不存在错误 - `Table 'ry_study.subject' doesn't exist` - **发生时间**:2025-11-11 - **错误信息**: - `Table 'ry_study.subject' doesn't exist` - `The error may exist in file [StudySubjectMapper.xml]` - **问题原因**: 1. 学习系统的数据库表还没有创建 2. 只执行了RuoYi基础SQL脚本,但没有创建学习系统相关的表 - **解决方案**: 1. 创建学习系统表结构SQL脚本 `ry_study_create_tables.sql` 2. 脚本包含以下表: - `subject` - 学科分类表 - `class` - 班级表 - `courseware` - 课件表 - `course` - 课程表 - `course_assignment` - 课程分配表 - `student_class` - 学员班级关联表 - `learning_record` - 学习记录表 - `learning_detail` - 学习详情记录表 - `monitor_record` - 学习监控表 3. 执行SQL脚本创建表结构 4. 确保表名和字段与Mapper XML中的定义完全一致 - **相关文件**: - `log/Sql/ry_study_create_tables.sql` - 学习系统表结构SQL脚本 - `RuoYi-Vue-redis/ry-news-system/src/main/resources/mapper/study/` - Mapper XML文件 - **状态**:已解决(已创建SQL脚本,待执行) ### 问题5 - **关联步骤**:[[第二阶段-代码整合到RuoYi]] - **问题描述**:学习记录菜单点击没有反应 - **发生时间**:2025-11-11 - **错误信息**: - 点击菜单后页面无反应,无法跳转 - **问题原因**: 1. 后端Controller路径与前端API路径不匹配: - 后端:`@RequestMapping("/study/learning")` - 前端API:`/study/learningRecord/list` 2. 后端权限配置与菜单权限不匹配: - 后端:`study:learning:list` - 菜单:`study:learningRecord:list` 3. 前端页面字段名与后端实体类字段名不匹配: - 前端:`courseTitle`, `studyCount`, `lastStudyTime` - 后端:`courseId`, `learnCount`, `lastLearnTime` - **解决方案**: 1. 修改后端Controller路径:`/study/learning` → `/study/learningRecord` 2. 修改后端权限配置:`study:learning:*` → `study:learningRecord:*` 3. 修改前端页面字段名,与后端实体类保持一致 - **相关文件**: - `RuoYi-Vue-redis/ry-news-admin/src/main/java/com/ddnai/web/controller/study/StudyLearningRecordController.java` - 已修改路径和权限 - `RuoYi-Vue-redis/ruoyi-ui/src/views/study/learningRecord/index.vue` - 已修改字段名 - **状态**:已解决