Quellcode durchsuchen

036 新表补 utf8mb4_unicode_ci:建表 DDL 加 COLLATE 并登记存量表 CONVERT

组合卡 UNION 两侧(order_checkout_batch vs pos_order)collation 不一致
报 1271 Illegal mix of collations。与 016 OMG 三表同因同处置:
建表 DDL 补 COLLATE=utf8mb4_unicode_ci 供未建表环境;已建表的测试
环境按新增 2026-10-20 节执行 7 张表 CONVERT 对齐。
qmj vor 3 Tagen
Ursprung
Commit
534f6c5175
1 geänderte Dateien mit 36 neuen und 7 gelöschten Zeilen
  1. 36 7
      updatesql/sql.md

+ 36 - 7
updatesql/sql.md

@@ -1971,7 +1971,7 @@ CREATE TABLE IF NOT EXISTS order_checkout_config (
   version BIGINT NOT NULL DEFAULT 0 COMMENT '配置保存CAS与报价版本',
   updated_by BIGINT DEFAULT NULL,
   update_time DATETIME(3) NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='036多店结算独立平台配置';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='036多店结算独立平台配置';
 
 INSERT INTO order_checkout_config
   (id, enabled, fence_meters, max_stores, confirmation_buffer_minutes, tiers_json, version, update_time)
@@ -2026,7 +2026,7 @@ CREATE TABLE IF NOT EXISTS order_checkout_batch (
   UNIQUE KEY uk_checkout_batch_parent (parent_dd_id),
   UNIQUE KEY uk_checkout_batch_request (user_id, request_key),
   KEY idx_checkout_batch_deadline (checkout_status, final_deadline_at)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='036多店结算批次与专用生效状态';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='036多店结算批次与专用生效状态';
 
 CREATE TABLE IF NOT EXISTS order_checkout_member (
   id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
@@ -2050,7 +2050,7 @@ CREATE TABLE IF NOT EXISTS order_checkout_member (
   UNIQUE KEY uk_checkout_member_order (pos_order_id),
   UNIQUE KEY uk_checkout_member_store (batch_id, store_id),
   KEY idx_checkout_member_batch_state (batch_id, payment_state)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='036多店子单快照与逐店付款事实';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='036多店子单快照与逐店付款事实';
 
 CREATE TABLE IF NOT EXISTS order_checkout_payment_attempt (
   id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
@@ -2069,7 +2069,7 @@ CREATE TABLE IF NOT EXISTS order_checkout_payment_attempt (
   UNIQUE KEY uk_checkout_attempt_order (channel, merchant_order_no),
   KEY idx_checkout_attempt_member (member_id, id),
   KEY idx_checkout_attempt_unknown (state, update_time)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='036线上真实发起证据和渠道核实';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='036线上真实发起证据和渠道核实';
 
 CREATE TABLE IF NOT EXISTS order_delivery_group (
   id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
@@ -2083,7 +2083,7 @@ CREATE TABLE IF NOT EXISTS order_delivery_group (
   update_time DATETIME(3) NOT NULL,
   UNIQUE KEY uk_delivery_group_batch (batch_id),
   KEY idx_delivery_group_rider (rider_id, status)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='036同骑手配送组;整组占1个任务';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='036同骑手配送组;整组占1个任务';
 
 CREATE TABLE IF NOT EXISTS order_checkout_outbox (
   id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
@@ -2096,7 +2096,7 @@ CREATE TABLE IF NOT EXISTS order_checkout_outbox (
   update_time DATETIME(3) NOT NULL,
   UNIQUE KEY uk_checkout_event (event_type, aggregate_id),
   KEY idx_checkout_outbox_retry (status, next_retry_at)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='036履约开放通知持久幂等事件';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='036履约开放通知持久幂等事件';
 
 CREATE TABLE IF NOT EXISTS order_checkout_refund_intent (
   id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
@@ -2114,7 +2114,7 @@ CREATE TABLE IF NOT EXISTS order_checkout_refund_intent (
   update_time DATETIME(3) NOT NULL,
   UNIQUE KEY uk_checkout_refund_attempt (channel, merchant_order_no),
   KEY idx_checkout_refund_retry (status, next_retry_at)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='036多店子单原路退款意图及恢复';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='036多店子单原路退款意图及恢复';
 
 -- 036 整组接单仅使用服务端最近一次定位;存量 NULL 定位时间按过期处理。
 ALTER TABLE rider_position ADD COLUMN reported_at DATETIME(3) NULL DEFAULT NULL COMMENT '服务端接收骑手定位时间';
@@ -2435,3 +2435,32 @@ ALTER TABLE pos_order ADD COLUMN customer_delivery_fee DECIMAL(10,2) NULL DEFAUL
 -- 逻辑:food_sku 非空且无关联的商品,按 JSON 补建缺失的 food_specs / food_specs_value(价格取 JSON 内嵌值)并写 food_spec_relation。
 -- 顺序要求:各环境必须先执行本回填,再部署去 food_sku 回退的后端版本,否则存量商品规格会从 App 消失。
 -- 执行记录:测试库(47.237.129.98/foodie) 2026-10-19 已执行(新建关联18条);生产库未执行。
+
+
+## 2026-10-20 036 多店下单测试库迁移执行记录
+
+- 按用户本次明确授权,已在测试库 `47.237.129.98:3306/foodie` 执行上方 `2026-10-13 036` 节;生产库未连接、未执行。
+- 执行完成时间:2026-10-20T11:41:02.244146+08:00。执行前保存相关旧表DDL及菜单/任务快照;执行后回查全部新增字段、唯一键和索引。
+- 新建7表:`order_checkout_config`、`order_checkout_batch`、`order_checkout_member`、`order_checkout_payment_attempt`、`order_delivery_group`、`order_checkout_outbox`、`order_checkout_refund_intent`。
+- 补充 `rider_position.reported_at DATETIME(3) NULL`,历史定位不回填;初始化配置 `id=1`,`enabled=0`,围栏1000米、最多5店、缓冲5分钟、2店九折/3店八折。
+- 新增3个菜单(ID 2268–2270)及6个任务(ID 110–115);全部任务 `status=1` 保持暂停,未开启多店功能。
+- 前置依赖检查:`pos_order` 的3个008免运快照字段、`pos_order_omg_attempt` 的 `gateway_environment/credit_refund_id` 以及新版 `pos_order_omg_refund` 已存在,本次不重复执行相关DDL;未重放其他历史迁移。
+- 执行19条语句,全部成功。新增业务表均为空(配置表1行);未修改历史订单、支付交易或退款事实,未执行真实支付/退款及App端到端联调。
+- 本机备份及执行明细目录:`C:\Users\99029\AppData\Local\Temp\foodie-036-test-20261020-cpba8pnw`(`before.json`、`executed.sql`、`execution.json`、`after.json`;无连接密码)。再次执行前仍应先检查目标库已有表/列,尤其不要重复添加 `reported_at`。
+
+## 2026-10-20 036 新表 collation 对齐(修复 UNION 报错 1271)
+
+> 036 七张新表建表时 `CHARSET=utf8mb4` 未指定 COLLATE,落成 utf8mb4_general_ci;
+> pos_order 等存量表为 utf8mb4_unicode_ci。组合卡查询 UNION 两侧同名列 collation 不一致,
+> 报 `Illegal mix of collations for operation 'UNION'`(与 016 OMG 三表同因,处置一致)。
+> 已建表环境执行下方 CONVERT 对齐;未建表环境无需执行(上方 036 建表 DDL 已补 COLLATE)。
+
+```sql
+ALTER TABLE order_checkout_config        CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE order_checkout_batch         CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE order_checkout_member        CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE order_checkout_payment_attempt CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE order_delivery_group         CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE order_checkout_outbox        CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE order_checkout_refund_intent CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+```