diff --git a/sql/20261110_backfill_college_id.sql b/sql/20261110_backfill_college_id.sql index 5f50677..2a56f7f 100644 --- a/sql/20261110_backfill_college_id.sql +++ b/sql/20261110_backfill_college_id.sql @@ -143,6 +143,9 @@ WHERE t.college_id IS NULL AND t.deleted = 0 AND t.user_id IS NOT NULL; -- 这样排除「药学院党委」「护理学院团委」这类手工节点, -- 也不用把学校根节点 ID(24)硬编码进脚本。 -- 组织名为空的节点先排除:空名会成为 LIKE '%%' 匹配一切,把每行都变成「多义」。 +-- 排序规则:业务表学院列是 utf8mb4_general_ci,sys_organization 在 MySQL 8 上是 +-- utf8mb4_0900_ai_ci,直接 LIKE 会报 Illegal mix of collations,所以显式 COLLATE 到 +-- utf8mb4_general_ci(5.7 与 8.0 都支持,两边方向都能收敛)。 -- 已知误配风险(文本包含关系,故意不猜):见 DONE 的 notes。 -- --------------------------------------------------------------------------- @@ -155,7 +158,7 @@ SET college_id = ( AND o.organization_name <> '' AND ( (o.organization_code IS NOT NULL AND o.organization_code <> '') OR EXISTS (SELECT 1 FROM gxmu_student s WHERE s.deleted = 0 AND s.college_id = o.organization_id) ) - AND t.unit_name LIKE CONCAT('%', o.organization_name, '%') + AND t.unit_name LIKE CONCAT('%', o.organization_name COLLATE utf8mb4_general_ci, '%') ) WHERE t.college_id IS NULL AND t.deleted = 0 AND t.unit_name IS NOT NULL AND t.unit_name <> ''; @@ -169,7 +172,7 @@ SET college_id = ( AND o.organization_name <> '' AND ( (o.organization_code IS NOT NULL AND o.organization_code <> '') OR EXISTS (SELECT 1 FROM gxmu_student s WHERE s.deleted = 0 AND s.college_id = o.organization_id) ) - AND t.school_name LIKE CONCAT('%', o.organization_name, '%') + AND t.school_name LIKE CONCAT('%', o.organization_name COLLATE utf8mb4_general_ci, '%') ) WHERE t.college_id IS NULL AND t.deleted = 0 AND t.school_name IS NOT NULL AND t.school_name <> ''; @@ -183,7 +186,7 @@ SET college_id = ( AND o.organization_name <> '' AND ( (o.organization_code IS NOT NULL AND o.organization_code <> '') OR EXISTS (SELECT 1 FROM gxmu_student s WHERE s.deleted = 0 AND s.college_id = o.organization_id) ) - AND t.school_info LIKE CONCAT('%', o.organization_name, '%') + AND t.school_info LIKE CONCAT('%', o.organization_name COLLATE utf8mb4_general_ci, '%') ) WHERE t.college_id IS NULL AND t.deleted = 0 AND t.school_info IS NOT NULL AND t.school_info <> ''; @@ -197,7 +200,7 @@ SET college_id = ( AND o.organization_name <> '' AND ( (o.organization_code IS NOT NULL AND o.organization_code <> '') OR EXISTS (SELECT 1 FROM gxmu_student s WHERE s.deleted = 0 AND s.college_id = o.organization_id) ) - AND t.college_grade_class LIKE CONCAT('%', o.organization_name, '%') + AND t.college_grade_class LIKE CONCAT('%', o.organization_name COLLATE utf8mb4_general_ci, '%') ) WHERE t.college_id IS NULL AND t.deleted = 0 AND t.college_grade_class IS NOT NULL AND t.college_grade_class <> ''; @@ -324,7 +327,7 @@ SELECT 'gxmu_sjqn' AS module, v.college_text, v.row_count, AND o.organization_name <> '' AND ( (o.organization_code IS NOT NULL AND o.organization_code <> '') OR EXISTS (SELECT 1 FROM gxmu_student s WHERE s.deleted = 0 AND s.college_id = o.organization_id) ) - AND v.college_text LIKE CONCAT('%', o.organization_name, '%')) AS matched_names + AND v.college_text LIKE CONCAT('%', o.organization_name COLLATE utf8mb4_general_ci, '%')) AS matched_names FROM (SELECT unit_name AS college_text, COUNT(*) AS row_count FROM gxmu_sjqn WHERE deleted = 0 AND college_id IS NULL GROUP BY unit_name) v @@ -336,7 +339,7 @@ SELECT 'gxmu_tzbcy_form', v.college_text, v.row_count, AND o.organization_name <> '' AND ( (o.organization_code IS NOT NULL AND o.organization_code <> '') OR EXISTS (SELECT 1 FROM gxmu_student s WHERE s.deleted = 0 AND s.college_id = o.organization_id) ) - AND v.college_text LIKE CONCAT('%', o.organization_name, '%')) + AND v.college_text LIKE CONCAT('%', o.organization_name COLLATE utf8mb4_general_ci, '%')) FROM (SELECT school_name AS college_text, COUNT(*) AS row_count FROM gxmu_tzbcy_form WHERE deleted = 0 AND college_id IS NULL GROUP BY school_name) v @@ -348,7 +351,7 @@ SELECT 'gxmu_qmgc_form', v.college_text, v.row_count, AND o.organization_name <> '' AND ( (o.organization_code IS NOT NULL AND o.organization_code <> '') OR EXISTS (SELECT 1 FROM gxmu_student s WHERE s.deleted = 0 AND s.college_id = o.organization_id) ) - AND v.college_text LIKE CONCAT('%', o.organization_name, '%')) + AND v.college_text LIKE CONCAT('%', o.organization_name COLLATE utf8mb4_general_ci, '%')) FROM (SELECT school_info AS college_text, COUNT(*) AS row_count FROM gxmu_qmgc_form WHERE deleted = 0 AND college_id IS NULL GROUP BY school_info) v @@ -360,7 +363,7 @@ SELECT 'gxmu_wxxzx_project', v.college_text, v.row_count, AND o.organization_name <> '' AND ( (o.organization_code IS NOT NULL AND o.organization_code <> '') OR EXISTS (SELECT 1 FROM gxmu_student s WHERE s.deleted = 0 AND s.college_id = o.organization_id) ) - AND v.college_text LIKE CONCAT('%', o.organization_name, '%')) + AND v.college_text LIKE CONCAT('%', o.organization_name COLLATE utf8mb4_general_ci, '%')) FROM (SELECT college_grade_class AS college_text, COUNT(*) AS row_count FROM gxmu_wxxzx_project WHERE deleted = 0 AND college_id IS NULL GROUP BY college_grade_class) v;