diff --git a/src/main/java/com/sztzjy/linkCommerce/service/ExamService.java b/src/main/java/com/sztzjy/linkCommerce/service/ExamService.java index e27444e..e8900d6 100644 --- a/src/main/java/com/sztzjy/linkCommerce/service/ExamService.java +++ b/src/main/java/com/sztzjy/linkCommerce/service/ExamService.java @@ -143,7 +143,8 @@ public class ExamService { public Map teacherExam(JwtUser teacher, long id) { requireTeacher(teacher); autoSubmitExpired(); Map result = ownedExam(teacher, id); - result.put("classes", jdbc.query("select c.teaching_class_id id,s.class_name name from exam_assessment_class c join school_class s on s.school_class_id=c.teaching_class_id where c.exam_id=?", + // exam_* 表为 utf8mb4_unicode_ci,遗留表 school_class/userinfo 沿用各自建表时的排序规则,列对列比较必须显式 COLLATE,否则报 1267。 + result.put("classes", jdbc.query("select c.teaching_class_id id,s.class_name name from exam_assessment_class c join school_class s on s.school_class_id=c.teaching_class_id collate utf8mb4_0900_ai_ci where c.exam_id=?", (rs, n) -> map("id", rs.getString("id"), "name", rs.getString("name")), id)); result.put("questions", examQuestions(id, true)); return result; @@ -237,7 +238,8 @@ public class ExamService { Map exam = ownedExam(teacher, examId); autoSubmitExpired(); boolean running = "IN_PROGRESS".equals(exam.get("status")); return jdbc.query("select a.id attempt_id,a.student_id,a.teaching_class_id,c.class_name,u.name,u.username,a.attempt_status,a.objective_score,a.subjective_score,a.total_score,a.submitted_at " + - "from exam_attempt a join userinfo u on u.user_id=a.student_id join school_class c on c.school_class_id=a.teaching_class_id " + + "from exam_attempt a join userinfo u on u.user_id=a.student_id collate utf8mb4_general_ci " + + "join school_class c on c.school_class_id=a.teaching_class_id collate utf8mb4_0900_ai_ci " + "where a.exam_id=?" + (running ? "" : " and a.attempt_status='SUBMITTED'") + " order by case when a.attempt_status='SUBMITTED' then 0 else 1 end,a.submitted_at,u.username", (rs, n) -> map("attemptId", rs.getLong("attempt_id"), "studentId", rs.getString("student_id"), "classId", rs.getString("teaching_class_id"),