COLLATION_FIX_REPORT.md 4.1 KB

Collation 冲突修复完成报告

本次修复(2024-04-22)

✅ 已修复表:PeriodSequenceDet

问题诊断:

  • PeriodSequenceDet 表的 DomainItemNumLine 字段使用 utf8mb4_0900_ai_ci
  • 导致与其他表(WorkOrdMasterItemMasterLineMaster)JOIN 时报错

修复操作:

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,暂未修改(不影响核心业务)