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