# 银行流水打标 UNION 排序规则冲突修复记录

## 问题现象

- 生产执行银行流水打标规则 `ABNORMAL_CUSTOMER_TRANSACTION` 时失败。
- 异常为 `Illegal mix of collations for operation 'UNION'`。
- 报错位置为 `CcdiBankTagAnalysisMapper.xml` 中 `selectAbnormalCustomerTransactionStatements` 查询。

## 根因

- 该规则会将 `ccdi_base_staff` 与 `ccdi_staff_fmy_relation` 组装为同一个人员主体派生表，并继续与银行流水、账户库、中介库、企业库做多分支 `UNION ALL`。
- 生产表字段排序规则确认无异常后，问题收敛到应用数据库连接会话。
- 生产 JDBC URL 只设置了 `characterEncoding=UTF-8`，未固定 `connectionCollation`。现场查询显示生产 MySQL 8.0.36 的 `@@character_set_connection` 为 `utf8mb3`，`@@collation_connection` 与 `@@collation_server` 均为 `utf8mb3_general_ci`；SQL 字符串字面量与 `CAST(... AS CHAR)` 也解析为 `utf8mb3_general_ci`，与项目字段统一使用的 `utf8mb4_general_ci` 不一致，容易在 `UNION` 合并字符串列时触发排序规则冲突。

## 修改内容

- 生产数据源 JDBC URL 增加 `connectionCollation=utf8mb4_general_ci`，固定应用连接会话排序规则。

## 影响范围

- 数据库结构：无变更。
- 后端配置：仅影响生产 profile 的 MySQL 连接会话排序规则。
- 后端代码：未修改 Java 和 MyBatis SQL 业务逻辑。
- 前端：无影响。

## 验证情况

- 已确认异常 SQL 对应规则为 `ABNORMAL_CUSTOMER_TRANSACTION`。
- 已确认生产 JDBC URL 未固定 `connectionCollation`。
- 现场查询 `@@character_set_connection` 返回 `utf8mb3`，`@@collation_connection` 与 `@@collation_server` 返回 `utf8mb3_general_ci`。
- 现场查询 `COLLATION('本人')` 与 `COLLATION(CAST(1 AS CHAR))` 返回 `utf8mb3_general_ci`。
- 未连接生产数据库执行验证；生产发布并重启后需确认应用连接中的 `@@collation_connection` 为 `utf8mb4_general_ci`，再重新触发失败项目的银行流水打标任务验证。
