zoujiajian hace 1 día
padre
commit
3841c9f2e6

+ 5 - 4
docs/sql/20261021-coupon-exchange-permissions.sql

@@ -1,3 +1,4 @@
+-- Explicit comparison collation avoids MySQL 1267 across database/session defaults.
 -- 优惠券 + 商品兑换码权限。请在应用数据库执行;重复串行执行不会重复插入。
 -- 如自动识别失败/存在同名菜单,请将下面两个 NULL 改成实际父菜单 id。
 -- 不创建前端路由,不改已有权限,不给普通角色扩权。
@@ -42,14 +43,14 @@ INSERT INTO cms_menu
 SELECT p.title, p.perms, p.perms, 'button', '', p.sort_num, p.parent_id, NOW(), NOW()
 FROM tmp_coupon_exchange_permissions p
 INNER JOIN cms_menu parent ON parent.id = p.parent_id AND parent.type <> 'button'
-WHERE NOT EXISTS (SELECT 1 FROM cms_menu existing WHERE existing.perms = p.perms);
+WHERE NOT EXISTS (SELECT 1 FROM cms_menu existing WHERE existing.perms = CONVERT(p.perms USING utf8mb4) COLLATE utf8mb4_unicode_ci);
 
 -- 只授权名称精确为 root 的角色;其他角色在后台角色管理中显式授权。
 INSERT INTO cms_role_menu (role_id, menu_id, created_time, update_time)
 SELECT r.id, m.id, NOW(), NOW()
 FROM cms_role r
 INNER JOIN cms_menu m ON 1 = 1
-INNER JOIN tmp_coupon_exchange_permissions p ON p.perms = m.perms
+INNER JOIN tmp_coupon_exchange_permissions p ON CONVERT(p.perms USING utf8mb4) COLLATE utf8mb4_unicode_ci = m.perms
 WHERE r.role_name = 'root'
   AND NOT EXISTS (
       SELECT 1 FROM cms_role_menu existing
@@ -61,14 +62,14 @@ COMMIT;
 SELECT p.perms, m.id AS menu_id, m.parent_id,
        CASE WHEN m.id IS NULL THEN 'MISSING: set parent override and rerun' ELSE 'OK' END AS result
 FROM tmp_coupon_exchange_permissions p
-LEFT JOIN cms_menu m ON m.perms = p.perms
+LEFT JOIN cms_menu m ON m.perms = CONVERT(p.perms USING utf8mb4) COLLATE utf8mb4_unicode_ci
 ORDER BY p.perms;
 
 SELECT r.id AS role_id, r.role_name, m.perms
 FROM cms_role_menu rm
 INNER JOIN cms_role r ON r.id = rm.role_id
 INNER JOIN cms_menu m ON m.id = rm.menu_id
-INNER JOIN tmp_coupon_exchange_permissions p ON p.perms = m.perms
+INNER JOIN tmp_coupon_exchange_permissions p ON CONVERT(p.perms USING utf8mb4) COLLATE utf8mb4_unicode_ci = m.perms
 WHERE r.role_name = 'root'
 ORDER BY m.perms;
 

+ 3 - 2
docs/sql/20261021-merchant-permissions.sql

@@ -1,3 +1,4 @@
+-- Explicit comparison collation avoids MySQL 1267 across database/session defaults.
 -- Set the existing merchant-management parent menu ID before running.
 SET @merchant_parent = NULL;
 START TRANSACTION;
@@ -5,11 +6,11 @@ INSERT INTO cms_menu (title,menu_name,perms,type,path,order_by,parent_id,created
 SELECT p.title,p.perms,p.perms,'button','',p.sort_num,m.id,NOW(),NOW()
 FROM (SELECT '商户查询' title,'merchant:view' perms,1 sort_num UNION ALL SELECT '新增商户','merchant:add',2 UNION ALL SELECT '编辑商户和收款配置','merchant:edit',3 UNION ALL SELECT '删除商户配置','merchant:delete',4 UNION ALL SELECT '渠道商户切换','merchant:updateChannelShop',5) p
 JOIN cms_menu m ON m.id=@merchant_parent AND m.type<>'button'
-WHERE NOT EXISTS (SELECT 1 FROM cms_menu e WHERE e.perms=p.perms);
+WHERE NOT EXISTS (SELECT 1 FROM cms_menu e WHERE e.perms = CONVERT(p.perms USING utf8mb4) COLLATE utf8mb4_unicode_ci);
 INSERT INTO cms_role_menu (role_id,menu_id,created_time,update_time)
 SELECT r.id,m.id,NOW(),NOW() FROM cms_role r JOIN cms_menu m ON m.perms IN ('merchant:view','merchant:add','merchant:edit','merchant:delete','merchant:updateChannelShop')
 WHERE r.role_name='root' AND NOT EXISTS (SELECT 1 FROM cms_role_menu e WHERE e.role_id=r.id AND e.menu_id=m.id);
 COMMIT;
 SELECT p.perms,m.id,IF(m.id IS NULL,'MISSING','OK') result
-FROM (SELECT 'merchant:view' perms UNION ALL SELECT 'merchant:add' UNION ALL SELECT 'merchant:edit' UNION ALL SELECT 'merchant:delete' UNION ALL SELECT 'merchant:updateChannelShop') p LEFT JOIN cms_menu m ON m.perms=p.perms;
+FROM (SELECT 'merchant:view' perms UNION ALL SELECT 'merchant:add' UNION ALL SELECT 'merchant:edit' UNION ALL SELECT 'merchant:delete' UNION ALL SELECT 'merchant:updateChannelShop') p LEFT JOIN cms_menu m ON m.perms = CONVERT(p.perms USING utf8mb4) COLLATE utf8mb4_unicode_ci;
 -- All five rows must be OK. Assign other roles explicitly, refresh permissions and re-login.

+ 3 - 2
docs/sql/20261021-refund-permissions.sql

@@ -1,3 +1,4 @@
+-- Explicit comparison collation avoids MySQL 1267 across database/session defaults.
 -- Set the existing order-management parent menu ID before running.
 SET @refund_parent = NULL;
 START TRANSACTION;
@@ -5,11 +6,11 @@ INSERT INTO cms_menu (title,menu_name,perms,type,path,order_by,parent_id,created
 SELECT p.title,p.perms,p.perms,'button','',p.sort_num,m.id,NOW(),NOW()
 FROM (SELECT '人工退款' title,'order:refund' perms,1 sort_num UNION ALL SELECT '余额转原渠道退款','order:refundTransfer',2) p
 JOIN cms_menu m ON m.id=@refund_parent AND m.type<>'button'
-WHERE NOT EXISTS (SELECT 1 FROM cms_menu e WHERE e.perms=p.perms);
+WHERE NOT EXISTS (SELECT 1 FROM cms_menu e WHERE e.perms = CONVERT(p.perms USING utf8mb4) COLLATE utf8mb4_unicode_ci);
 INSERT INTO cms_role_menu (role_id,menu_id,created_time,update_time)
 SELECT r.id,m.id,NOW(),NOW() FROM cms_role r JOIN cms_menu m ON m.perms IN ('order:refund','order:refundTransfer')
 WHERE r.role_name='root' AND NOT EXISTS (SELECT 1 FROM cms_role_menu e WHERE e.role_id=r.id AND e.menu_id=m.id);
 COMMIT;
 SELECT p.perms,m.id,IF(m.id IS NULL,'MISSING','OK') result
-FROM (SELECT 'order:refund' perms UNION ALL SELECT 'order:refundTransfer') p LEFT JOIN cms_menu m ON m.perms=p.perms;
+FROM (SELECT 'order:refund' perms UNION ALL SELECT 'order:refundTransfer') p LEFT JOIN cms_menu m ON m.perms = CONVERT(p.perms USING utf8mb4) COLLATE utf8mb4_unicode_ci;
 -- Both rows must be OK. Assign other roles explicitly, refresh permissions and re-login.