# Collation 冲突修复完成报告 ## 本次修复(2024-04-22) ### ✅ 已修复表:PeriodSequenceDet **问题诊断:** - ❌ `PeriodSequenceDet` 表的 `Domain`、`ItemNum`、`Line` 字段使用 `utf8mb4_0900_ai_ci` - 导致与其他表(`WorkOrdMaster`、`ItemMaster`、`LineMaster`)JOIN 时报错 **修复操作:** ```sql ALTER TABLE PeriodSequenceDet MODIFY COLUMN Domain VARCHAR(8) COLLATE utf8mb4_general_ci, MODIFY COLUMN ItemNum VARCHAR(24) COLLATE utf8mb4_general_ci, MODIFY COLUMN Line VARCHAR(8) COLLATE utf8mb4_general_ci; ``` **修复后验证:** ``` 表名 字段名 排序规则 ItemMaster Domain utf8mb4_general_ci ✅ ItemMaster ItemNum utf8mb4_general_ci ✅ LineMaster Domain utf8mb4_general_ci ✅ LineMaster Line utf8mb4_general_ci ✅ PeriodSequenceDet Domain utf8mb4_general_ci ✅ PeriodSequenceDet ItemNum utf8mb4_general_ci ✅ PeriodSequenceDet Line utf8mb4_general_ci ✅ WorkOrdMaster Domain utf8mb4_general_ci ✅ WorkOrdMaster ItemNum utf8mb4_general_ci ✅ WorkOrdMaster WorkOrd utf8mb4_general_ci ✅ mes_morder morder_no utf8mb4_general_ci ✅ ``` **解决的错误:** ``` Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '=' ``` --- ## 历史修复记录 ### 1. 产线管理相关表 ✅ **QualityLineWorkDetail**(产线休息时间) - Domain, Site, ProdLine → utf8mb4_general_ci ✅ **LineMaster**(产线主数据) - Domain, Line → utf8mb4_general_ci ✅ **HolidayMaster**(产线节假日) - 本身已是 utf8mb4_general_ci,无需修改 ✅ **ResourceOccupancyTime**(产线加班) - Domain, Site, Resource, ResourceType, Descr, Ufld1, Ufld2, CreateUser, UpdateUser → utf8mb4_general_ci ### 2. 订单与交付相关表 ✅ **ASNBOLShipperMaster**(订单发货主表) - Department, Domain, Site → 本身已是 utf8mb4_general_ci ✅ **DepartmentMaster**(部门主数据) - Department, Domain, Descr → 本身已是 utf8mb4_general_ci ✅ **ShippingPlanDetail**(发货计划明细) - ItemNum, bill_no, OrdNbr → 本身已是 utf8mb4_general_ci ✅ **ASNBOLShipperDetail**(发货明细) - ContainerItem, OrdNbr → 本身已是 utf8mb4_general_ci ### 3. 核心业务表 ✅ **NbrMaster / NbrDetail**(单据主数据) - Domain, Cust, Department → utf8mb4_general_ci ✅ **PurOrdMaster / PurOrdRctMaster**(采购订单) - Domain, Site, Department → utf8mb4_general_ci ✅ **ScheduleResultOpMaster**(排产结果) - Domain, Line → utf8mb4_general_ci ✅ **LinkagePlan**(联动计划) - bill_no, custom_no, item_number → utf8mb4_general_ci ✅ **OpTransEmployee**(操作员工) - Domain → utf8mb4_general_ci ✅ **PeriodSequenceDet**(工艺顺序明细) - Domain, ItemNum, Line → utf8mb4_general_ci --- ## 修复原理 将所有可能用于 JOIN 的字符串字段统一为 **utf8mb4_general_ci**,解决不同表之间字段排序规则不一致导致的错误。 ## 验证方法 1. **刷新浏览器页面**,清除前端缓存 2. **重启后端服务**(可选,建议) 3. **测试相关页面的查询功能** ## SQL 脚本位置 所有修复脚本已保存在: - `d:\DEMONET\tools\sql\fix_collation.sql`(第一批) - `d:\DEMONET\tools\sql\fix_all_collations.sql`(ResourceOccupancyTime) - `d:\DEMONET\tools\sql\fix_remaining_collations.sql`(其他核心表) - `d:\DEMONET\tools\sql\fix_workorder_collations.sql`(PeriodSequenceDet)✨ 新增 - `d:\DEMONET\tools\sql\check_workorder_collations.sql`(检查脚本)✨ 新增 - `d:\DEMONET\tools\sql\test_workorder_query.sql`(测试查询)✨ 新增 ## 注意事项 - ✅ 所有修改均为 **ALTER TABLE** 操作,不影响数据内容 - ✅ 已验证修改后的表结构 - ✅ 已测试工单调度相关查询,无错误 - ⚠️ 如果还有其他页面报 collation 错误,请告知具体页面和错误信息 - ⚠️ 审批流、钉钉等插件表仍为 utf8mb4_unicode_ci,暂未修改(不影响核心业务)