fix_executable_daily_plan_collations.sql 5.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. -- =============================================================================
  2. -- 可执行日计划列表:统一涉及表的字符串列为 utf8mb4_general_ci
  3. -- 错误示例:Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT)
  4. -- =============================================================================
  5. -- 使用前:
  6. -- 1. 备份 aidopdev(或当前库名)
  7. -- 2. 将下方 USE 中的库名改为实际库名
  8. -- 3. 优先执行「方式一」生成语句,在测试环境验证后再在生产执行
  9. -- =============================================================================
  10. USE aidopdev;
  11. -- -----------------------------------------------------------------------------
  12. -- 方式一(推荐):按当前列类型生成 MODIFY,仅处理非 utf8mb4_general_ci 的字符串列
  13. -- 在 MySQL 客户端执行本段查询,复制结果列 stmt 中的 SQL 逐条执行(或导出后执行)
  14. -- 注意:未附带 DEFAULT/ON UPDATE,若列有默认值或生成列,请在生成结果上手工补全后再执行
  15. -- -----------------------------------------------------------------------------
  16. SELECT CONCAT(
  17. 'ALTER TABLE `', TABLE_NAME, '` MODIFY COLUMN `', COLUMN_NAME, '` ', COLUMN_TYPE,
  18. ' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci',
  19. IF(IS_NULLABLE = 'YES', ' NULL', ' NOT NULL'),
  20. ';'
  21. ) AS stmt
  22. FROM INFORMATION_SCHEMA.COLUMNS
  23. WHERE TABLE_SCHEMA = DATABASE()
  24. AND TABLE_NAME IN (
  25. 'PeriodSequenceDet',
  26. 'LineMaster',
  27. 'ItemMaster',
  28. 'WorkOrdMaster',
  29. 'WorkOrdRouting',
  30. 'mes_morder',
  31. 'ProdLineDetail',
  32. 'ScheduleResultOpMaster',
  33. 'WorkCtrMaster',
  34. 'EquipmentList'
  35. )
  36. AND DATA_TYPE IN ('varchar', 'char', 'text', 'mediumtext', 'longtext')
  37. AND COLLATION_NAME IS NOT NULL
  38. AND COLLATION_NAME <> 'utf8mb4_general_ci'
  39. ORDER BY TABLE_NAME, ORDINAL_POSITION;
  40. -- -----------------------------------------------------------------------------
  41. -- 方式二(可选):若某表不在 information_schema 或生成语句执行失败,
  42. -- 可对照业务实体手工执行下面示例(长度请按你库中 SHOW CREATE TABLE 调整)
  43. -- -----------------------------------------------------------------------------
  44. /*
  45. ALTER TABLE PeriodSequenceDet
  46. MODIFY `Domain` VARCHAR(8) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  47. MODIFY `Site` VARCHAR(8) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  48. MODIFY `ItemNum` VARCHAR(30) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  49. MODIFY `Line` VARCHAR(8) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  50. MODIFY `Op` VARCHAR(6) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  51. MODIFY `WorkCtr` VARCHAR(8) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  52. MODIFY `Period` VARCHAR(8) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  53. MODIFY `WorkOrds` VARCHAR(64) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  54. MODIFY `Status` VARCHAR(32) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  55. MODIFY `Employee` VARCHAR(128) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  56. MODIFY `MoldNum` VARCHAR(64) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  57. MODIFY `UChar1` VARCHAR(64) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  58. MODIFY `UChar2` VARCHAR(64) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  59. MODIFY `CreateUser` VARCHAR(8) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  60. MODIFY `UpdateUser` VARCHAR(8) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  61. ALTER TABLE ScheduleResultOpMaster
  62. MODIFY `Domain` VARCHAR(8) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  63. MODIFY `WorkOrd` VARCHAR(64) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  64. MODIFY `WorkCtr` VARCHAR(8) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  65. MODIFY `Line` VARCHAR(500) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  66. MODIFY `ItemNum` VARCHAR(30) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  67. MODIFY `Op` VARCHAR(6) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  68. MODIFY `OpDescr` VARCHAR(256) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  69. MODIFY `InternalEquipmentCode` VARCHAR(64) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  70. MODIFY `OccupyInternalEquipmentCode` VARCHAR(64) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  71. MODIFY `MoldTypeCode` VARCHAR(64) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  72. MODIFY `AssignedEmployeeID` VARCHAR(128) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  73. MODIFY `SkillNo` VARCHAR(64) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  74. MODIFY `Remark` VARCHAR(512) NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  75. */
  76. -- 验证(执行修复后应无 unicode_ci / 0900_ai_ci)
  77. SELECT TABLE_NAME, COLUMN_NAME, COLLATION_NAME
  78. FROM INFORMATION_SCHEMA.COLUMNS
  79. WHERE TABLE_SCHEMA = DATABASE()
  80. AND TABLE_NAME IN (
  81. 'PeriodSequenceDet', 'LineMaster', 'ItemMaster', 'WorkOrdMaster', 'WorkOrdRouting',
  82. 'mes_morder', 'ProdLineDetail', 'ScheduleResultOpMaster', 'WorkCtrMaster', 'EquipmentList'
  83. )
  84. AND COLLATION_NAME IS NOT NULL
  85. ORDER BY TABLE_NAME, COLUMN_NAME;