Unify staff recruitment work table collation
This commit is contained in:
@@ -40,10 +40,10 @@
|
|||||||
r.created_by, r.create_time, r.updated_by, r.update_time
|
r.created_by, r.create_time, r.updated_by, r.update_time
|
||||||
FROM ccdi_staff_recruitment r
|
FROM ccdi_staff_recruitment r
|
||||||
LEFT JOIN (
|
LEFT JOIN (
|
||||||
SELECT recruit_id, COUNT(1) AS work_experience_count
|
SELECT recruit_id COLLATE utf8mb4_general_ci AS recruit_id, COUNT(1) AS work_experience_count
|
||||||
FROM ccdi_staff_recruitment_work
|
FROM ccdi_staff_recruitment_work
|
||||||
GROUP BY recruit_id
|
GROUP BY recruit_id COLLATE utf8mb4_general_ci
|
||||||
) w ON w.recruit_id = r.recruit_id
|
) w ON w.recruit_id COLLATE utf8mb4_general_ci = r.recruit_id COLLATE utf8mb4_general_ci
|
||||||
<where>
|
<where>
|
||||||
<if test="query.recruitName != null and query.recruitName != ''">
|
<if test="query.recruitName != null and query.recruitName != ''">
|
||||||
AND r.recruit_name LIKE CONCAT('%', #{query.recruitName}, '%')
|
AND r.recruit_name LIKE CONCAT('%', #{query.recruitName}, '%')
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# CCDI 数据库默认排序规则修复实施计划
|
||||||
|
|
||||||
|
## 保存路径确认
|
||||||
|
|
||||||
|
- 路径:`docs/plans/backend/2026-04-22-ccdi-database-default-collation-backend-implementation.md`
|
||||||
|
- 归类:后端实施计划
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
- 将 `ccdi` 数据库默认字符集统一为 `utf8mb4`
|
||||||
|
- 将 `ccdi` 数据库默认排序规则统一为 `utf8mb4_general_ci`
|
||||||
|
|
||||||
|
## 背景
|
||||||
|
|
||||||
|
- 当前 `ccdi` 数据库默认排序规则为 `utf8mb4_unicode_ci`。
|
||||||
|
- 仓库数据库规范要求业务库默认排序规则统一为 `utf8mb4_general_ci`,避免新建表或新增字符字段继续继承错误默认值。
|
||||||
|
|
||||||
|
## 实施步骤
|
||||||
|
|
||||||
|
1. 新增数据库增量脚本,执行 `ALTER DATABASE ccdi CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci`。
|
||||||
|
2. 使用 `bin/mysql_utf8_exec.sh` 在当前开发库执行脚本。
|
||||||
|
3. 查询 `information_schema.SCHEMATA` 回查默认字符集与默认排序规则是否生效。
|
||||||
|
4. 补充实施记录,说明变更范围与验证结果。
|
||||||
|
|
||||||
|
## 验证命令
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bin/mysql_utf8_exec.sh sql/migration/2026-04-22-fix-ccdi-database-default-collation.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mysql ... -e "SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='ccdi';"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 完成标准
|
||||||
|
|
||||||
|
- `ccdi` 的 `DEFAULT_CHARACTER_SET_NAME` 为 `utf8mb4`
|
||||||
|
- `ccdi` 的 `DEFAULT_COLLATION_NAME` 为 `utf8mb4_general_ci`
|
||||||
|
- 本次变更已形成实施记录
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# 员工招聘列表排序规则冲突修复实施计划
|
||||||
|
|
||||||
|
## 保存路径确认
|
||||||
|
|
||||||
|
- 路径:`docs/plans/backend/2026-04-22-staff-recruitment-collation-fix-backend-implementation.md`
|
||||||
|
- 归类:后端实施计划
|
||||||
|
|
||||||
|
## 背景
|
||||||
|
|
||||||
|
- 员工招聘列表查询执行 `ccdi_staff_recruitment` 与 `ccdi_staff_recruitment_work` 的 `recruit_id` 关联时,报错 `Illegal mix of collations (utf8mb4_0900_ai_ci) and (utf8mb4_general_ci)`。
|
||||||
|
- 现有招聘主表已被纳入全库统一排序规则脚本,但历史工作经历子表在建表时未显式声明 `utf8mb4_general_ci`,且未被纳入统一修复脚本,导致在 MySQL 8 环境中可能沿用默认 `utf8mb4_0900_ai_ci`。
|
||||||
|
|
||||||
|
## 实施范围
|
||||||
|
|
||||||
|
- 后端 MyBatis 查询 XML
|
||||||
|
- 招聘相关 SQL 建表脚本
|
||||||
|
- 数据库增量迁移脚本
|
||||||
|
|
||||||
|
## 实施步骤
|
||||||
|
|
||||||
|
1. 修改招聘列表查询 SQL,在 `ccdi_staff_recruitment_work.recruit_id` 聚合与关联时显式使用 `utf8mb4_general_ci`,先恢复查询可用性。
|
||||||
|
2. 修正 `2026-04-15-add-staff-recruitment-social-work-summary.sql`,为 `ccdi_staff_recruitment_work` 建表语句补齐 `COLLATE=utf8mb4_general_ci`。
|
||||||
|
3. 补充增量脚本,将现有库中的 `ccdi_staff_recruitment_work` 转换为 `utf8mb4_general_ci`。
|
||||||
|
4. 更新全库统一排序规则脚本,将该表纳入统一修复范围,避免后续漏执行。
|
||||||
|
5. 编译受影响模块,确认 Mapper XML 与资源装配正常。
|
||||||
|
|
||||||
|
## 验证要点
|
||||||
|
|
||||||
|
- `selectRecruitmentPage` 查询不再因 `recruit_id` 关联报排序规则冲突。
|
||||||
|
- `ccdi_staff_recruitment_work` 表级与字符字段排序规则统一为 `utf8mb4_general_ci`。
|
||||||
|
- `mvn -pl ccdi-info-collection -am compile` 通过。
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# CCDI 数据库默认排序规则修复实施记录
|
||||||
|
|
||||||
|
## 基本信息
|
||||||
|
|
||||||
|
- 日期:2026-04-22
|
||||||
|
- 范围:`ccdi` 数据库默认字符集与默认排序规则
|
||||||
|
- 关联计划:`docs/plans/backend/2026-04-22-ccdi-database-default-collation-backend-implementation.md`
|
||||||
|
|
||||||
|
## 实施内容
|
||||||
|
|
||||||
|
- 新增 `sql/migration/2026-04-22-fix-ccdi-database-default-collation.sql`
|
||||||
|
- 通过 `ALTER DATABASE ccdi CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci` 修正数据库级默认值
|
||||||
|
- 执行后回查 `information_schema.SCHEMATA` 验证默认字符集与默认排序规则
|
||||||
|
|
||||||
|
## 验证结果
|
||||||
|
|
||||||
|
- 执行前:
|
||||||
|
- `DEFAULT_CHARACTER_SET_NAME = utf8mb4`
|
||||||
|
- `DEFAULT_COLLATION_NAME = utf8mb4_unicode_ci`
|
||||||
|
- 执行脚本:
|
||||||
|
`bin/mysql_utf8_exec.sh sql/migration/2026-04-22-fix-ccdi-database-default-collation.sql`
|
||||||
|
结果:PASS
|
||||||
|
- 执行后回查:
|
||||||
|
- `DEFAULT_CHARACTER_SET_NAME = utf8mb4`
|
||||||
|
- `DEFAULT_COLLATION_NAME = utf8mb4_general_ci`
|
||||||
|
- `SHOW CREATE DATABASE ccdi` 返回:
|
||||||
|
`CREATE DATABASE \`ccdi\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci`
|
||||||
|
|
||||||
|
## 说明
|
||||||
|
|
||||||
|
- 本次仅修改数据库默认字符集与默认排序规则,不会自动改写已存在表或已有字符字段的排序规则。
|
||||||
|
- 已存在对象若仍为其他排序规则,需要通过表级或字段级迁移脚本单独修复。
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# 员工招聘列表排序规则冲突修复实施记录
|
||||||
|
|
||||||
|
## 基本信息
|
||||||
|
|
||||||
|
- 日期:2026-04-22
|
||||||
|
- 范围:员工招聘列表后端查询与数据库排序规则修复
|
||||||
|
- 关联计划:`docs/plans/backend/2026-04-22-staff-recruitment-collation-fix-backend-implementation.md`
|
||||||
|
|
||||||
|
## 实施内容
|
||||||
|
|
||||||
|
- 修复 `CcdiStaffRecruitmentMapper.xml` 中招聘列表查询,对历史工作经历子查询的 `recruit_id` 聚合与关联显式指定 `utf8mb4_general_ci`,避免主表与子表排序规则不一致时在查询阶段报错。
|
||||||
|
- 修复 `2026-04-15-add-staff-recruitment-social-work-summary.sql`,为 `ccdi_staff_recruitment_work` 建表语句补齐 `COLLATE=utf8mb4_general_ci`,防止新环境建表时继承 MySQL 默认 `utf8mb4_0900_ai_ci`。
|
||||||
|
- 新增 `2026-04-22-fix-staff-recruitment-work-collation.sql`,用于修复已有库中 `ccdi_staff_recruitment_work` 的存量排序规则。
|
||||||
|
- 更新 `2026-04-17-unify-all-table-collation-to-utf8mb4-general-ci.sql`,将 `ccdi_staff_recruitment_work` 纳入统一排序规则脚本。
|
||||||
|
|
||||||
|
## 根因结论
|
||||||
|
|
||||||
|
- `ccdi_staff_recruitment` 已统一为 `utf8mb4_general_ci`。
|
||||||
|
- `ccdi_staff_recruitment_work` 的建表脚本未显式指定排序规则,且全库统一脚本遗漏该表,在 MySQL 8 默认排序规则为 `utf8mb4_0900_ai_ci` 的环境中会产生漂移。
|
||||||
|
- 招聘列表 SQL 使用 `w.recruit_id = r.recruit_id` 进行关联时触发不同排序规则比较,导致查询失败。
|
||||||
|
|
||||||
|
## 验证结果
|
||||||
|
|
||||||
|
- 后端编译:
|
||||||
|
`mvn -pl ccdi-info-collection -am compile`
|
||||||
|
结果:PASS
|
||||||
|
- 数据库修复脚本:
|
||||||
|
`bin/mysql_utf8_exec.sh sql/migration/2026-04-22-fix-staff-recruitment-work-collation.sql`
|
||||||
|
结果:未执行(本次仅完成代码与脚本修复,待目标库执行)
|
||||||
|
|
||||||
|
## 后续执行说明
|
||||||
|
|
||||||
|
- 代码发布前,需先在目标库执行本次新增的排序规则修复脚本。
|
||||||
|
- 若目标库此前执行过 `2026-04-17-unify-all-table-collation-to-utf8mb4-general-ci.sql`,也仍需补执行本次新增脚本,因为旧脚本未覆盖 `ccdi_staff_recruitment_work`。
|
||||||
@@ -41,4 +41,4 @@ CREATE TABLE IF NOT EXISTS `ccdi_staff_recruitment_work`
|
|||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
KEY `idx_recruit_id` (`recruit_id`),
|
KEY `idx_recruit_id` (`recruit_id`),
|
||||||
KEY `idx_recruit_id_sort_order` (`recruit_id`, `sort_order`)
|
KEY `idx_recruit_id_sort_order` (`recruit_id`, `sort_order`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='招聘信息历史工作经历表';
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='招聘信息历史工作经历表';
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ ALTER TABLE ccdi_purchase_transaction CONVERT TO CHARACTER SET utf8mb4 COLLATE u
|
|||||||
ALTER TABLE ccdi_staff_enterprise_relation CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
ALTER TABLE ccdi_staff_enterprise_relation CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||||
ALTER TABLE ccdi_staff_fmy_relation CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
ALTER TABLE ccdi_staff_fmy_relation CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||||
ALTER TABLE ccdi_staff_recruitment CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
ALTER TABLE ccdi_staff_recruitment CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||||
|
ALTER TABLE ccdi_staff_recruitment_work CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||||
ALTER TABLE ccdi_staff_transfer CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
ALTER TABLE ccdi_staff_transfer CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||||
ALTER TABLE gen_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
ALTER TABLE gen_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||||
ALTER TABLE gen_table_column CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
ALTER TABLE gen_table_column CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
-- 修复 ccdi 数据库默认字符集与排序规则
|
||||||
|
-- 目标:将数据库默认字符集统一为 utf8mb4,默认排序规则统一为 utf8mb4_general_ci
|
||||||
|
|
||||||
|
ALTER DATABASE `ccdi`
|
||||||
|
CHARACTER SET = utf8mb4
|
||||||
|
COLLATE = utf8mb4_general_ci;
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
-- 修复员工招聘历史工作经历表排序规则漂移
|
||||||
|
-- 目标:
|
||||||
|
-- 1. 将 ccdi_staff_recruitment_work 统一为 utf8mb4 / utf8mb4_general_ci。
|
||||||
|
-- 2. 消除与 ccdi_staff_recruitment 在 recruit_id 关联时的排序规则冲突。
|
||||||
|
|
||||||
|
ALTER TABLE `ccdi_staff_recruitment_work`
|
||||||
|
CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||||
Reference in New Issue
Block a user