liusheng
4 天以前 fb89df539c6293a41933e445df25fa9b8047ba18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
-- =============================================================================
-- 外链短码改造(2026-11-06)
--   原短码:String.format("%03X", id)   —— 3~4 位十六进制,等于把自增主键写进链接,可遍历
--   新短码:ShortCode.encode(id)        —— 固定 6 位 base62,带密钥 Feistel 双射,不可枚举
--
-- ⚠️ 执行顺序:**先执行本脚本第 2 步,再发布新版本的 jar**。
--    否则写 6 位短码时:
--      * MySQL 严格模式(5.7+ 默认)→ UPDATE 报 "Data too long for column 'radix'",短信发不出去;
--      * 非严格模式 → 静默截断成 4 位,radix 列变脏数据
--        (线上还能靠 getInfoByParam 反解主键兜底,但不应依赖这个兜底)。
--
-- 本脚本可重复执行。
-- =============================================================================
 
-- 1) 先看当前列定义(记录原始值,便于回滚)
SHOW COLUMNS FROM service_out_path LIKE 'radix';
 
-- 2) 列宽不足 6 位时执行;已 >= 16 位可整句跳过
ALTER TABLE service_out_path
    MODIFY COLUMN radix VARCHAR(16) NULL
    COMMENT '外链短码:新数据为 6 位 base62,历史数据为 3~5 位十六进制;getInfoByParam 两种都认';
 
-- 3) 执行后核对
SHOW COLUMNS FROM service_out_path LIKE 'radix';
 
-- 4) 观察存量分布(上线后新产生的短码应全部是 6 位)
-- SELECT CHAR_LENGTH(radix) AS len, COUNT(*) AS cnt
-- FROM service_out_path
-- WHERE radix IS NOT NULL AND radix <> ''
-- GROUP BY CHAR_LENGTH(radix)
-- ORDER BY len;