-- ============================================================================= -- 外链短码改造(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;