fix(sql): 回填脚本 LIKE 显式 COLLATE(MySQL 8 上业务表 general_ci 与组织表 0900_ai_ci 混用会报错)
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user