-- ============================================================================ -- 002_i18n_columns.sql -- 方案 A(独立列):把品牌名 / 走秀标题 / 描述 拆分为 en / cn 两列。 -- -- 设计前提(已用探查脚本核对线上数据): -- * brand.name 多为拉丁名,但 266 个含中文;show_name 形如 "拉丁/中文"(2025 个含中文)。 -- * brand_runway.title / description 校验过 han=0,当前全为英文。 -- * 排序 / A-Z 索引 / 关键词搜索 统一基于 name_en(拉丁),中文品牌(name_en 为空)归入 OTHER 桶。 -- -- 回填策略: -- name_en = name 去掉中文后的部分;若 name 全中文则取 show_name 斜杠前部分。 -- name_cn = show_name 斜杠后含中文的部分;否则 show_name 本身(含中文);否则 name(含中文)。 -- title_en / description_en = 原 title / description;title_cn / description_cn = ''(当前无中文)。 -- -- 旧列 name / show_name / title / description 保留不删,作为回退与对比; -- 代码全部改用 *_en / *_cn 后,可择机在后续迁移中 DROP。 -- ============================================================================ ALTER TABLE brand ADD COLUMN name_en VARCHAR(255) NOT NULL DEFAULT '' AFTER name, ADD COLUMN name_cn VARCHAR(255) NOT NULL DEFAULT '' AFTER name_en; ALTER TABLE brand_runway ADD COLUMN title_en VARCHAR(255) NOT NULL DEFAULT '' AFTER title, ADD COLUMN title_cn VARCHAR(255) NOT NULL DEFAULT '' AFTER title_en, ADD COLUMN description_en VARCHAR(1024) NOT NULL DEFAULT '' AFTER description, ADD COLUMN description_cn VARCHAR(1024) NOT NULL DEFAULT '' AFTER description_en; -- 回填品牌名:拆拉丁 / 中文 UPDATE brand SET name_en = CASE WHEN TRIM(REGEXP_REPLACE(name, '[一-鿿]', '')) <> '' THEN TRIM(REGEXP_REPLACE(name, '[一-鿿]', '')) WHEN show_name LIKE '%/%' THEN TRIM(SUBSTRING_INDEX(show_name, '/', 1)) ELSE '' END, name_cn = CASE WHEN show_name LIKE '%/%' AND SUBSTRING_INDEX(show_name, '/', -1) REGEXP '[一-鿿]' THEN TRIM(SUBSTRING_INDEX(show_name, '/', -1)) WHEN show_name REGEXP '[一-鿿]' THEN TRIM(show_name) WHEN name REGEXP '[一-鿿]' THEN TRIM(name) ELSE '' END; -- 回填走秀:当前 title / description 全为英文,直接进 *_en UPDATE brand_runway SET title_en = title, description_en = description, title_cn = '', description_cn = ''; -- ============================================================================ -- 第 5 步(依赖「分类字段回填迁移」之后执行):title_cn 规则生成 -- -- 前提:collection_type / season / year 已由历史迁移解析回填(rtw/menswear/ -- couture/resort/pre_fall × spring/fall/空)。title 本质是「季节/品类描述」, -- 品牌名在 JOIN 的 brand_name 里单独给,因此 title_cn 可纯规则生成, -- 完全不依赖外部翻译服务,结果稳定可重跑。 -- -- 映射:resort→「{year} 度假系列」、pre_fall→「{year} 早秋系列」、 -- rtw→「{year} {春夏|秋冬}成衣」、menswear→「{year} {春夏|秋冬}男装」、 -- couture→「{year} {春夏|秋冬}高定」。 -- -- 执行器:scripts/backfill_title_cn/main.go(幂等,整表覆盖重跑无害)。 -- 该步骤与上方 i18n 加列/回填相互独立,可单独重跑。 -- ============================================================================ UPDATE brand_runway SET title_cn = CASE WHEN collection_type = 'resort' THEN CONCAT(year, ' 度假系列') WHEN collection_type = 'pre_fall' THEN CONCAT(year, ' 早秋系列') WHEN collection_type = 'rtw' AND season = 'spring' THEN CONCAT(year, ' 春夏成衣') WHEN collection_type = 'rtw' AND season = 'fall' THEN CONCAT(year, ' 秋冬成衣') WHEN collection_type = 'rtw' THEN CONCAT(year, ' 成衣') WHEN collection_type = 'menswear' AND season = 'spring' THEN CONCAT(year, ' 春夏男装') WHEN collection_type = 'menswear' AND season = 'fall' THEN CONCAT(year, ' 秋冬男装') WHEN collection_type = 'couture' AND season = 'spring' THEN CONCAT(year, ' 春夏高定') WHEN collection_type = 'couture' AND season = 'fall' THEN CONCAT(year, ' 秋冬高定') ELSE CONCAT(year, ' 系列') END WHERE is_deleted = 0;