-- ===================================================================== -- V26 · 修复品类字典中文乱码(双重编码) -- --------------------------------------------------------------------- -- 现象:后台「品类管理」品类名称显示为 "煉明" 之类乱码。 -- -- 成因:服务器 mysql 客户端运行在 C locale,character_set_client 默认 latin1 -- (容器内 `SELECT @@character_set_client` → latin1)。 -- 迁移脚本经 Windows `type | plink` 管道喂给客户端时,UTF-8 字节被当作 -- latin1 字符接收,再按 utf8mb4 列存储 → 中文变成双重编码。 -- (历史数据如 product.name 中文正常,是因为当时用 docker cp 进容器再执行, -- 没走管道。) -- -- 处理: -- 1) 本脚本首行 SET NAMES utf8mb4,保证脚本里的中文字面量按 utf8mb4 解释; -- 2) 直接按 code 写回正确的中文名称与备注(幂等:仅在值不一致时才更新); -- 3) 后续所有含中文的迁移脚本都需在首行加 SET NAMES utf8mb4, -- deploy-all.bat 也已为 mysql 客户端补 --default-character-set=utf8mb4。 -- -- 无存储过程、无 DELIMITER;幂等可重复执行。 -- ===================================================================== SET NAMES utf8mb4; UPDATE product_category SET name = '照明', remark = '灯/灯泡/灯带', update_time = NOW() WHERE deleted = 0 AND code = 'light'; UPDATE product_category SET name = '开关/插座', remark = '开关/插座/墙面面板', update_time = NOW() WHERE deleted = 0 AND code = 'switch'; UPDATE product_category SET name = '空调/暖通', remark = '空调/风扇/取暖器', update_time = NOW() WHERE deleted = 0 AND code = 'ac'; UPDATE product_category SET name = '窗帘', remark = '窗帘/遮阳', update_time = NOW() WHERE deleted = 0 AND code = 'curtain'; UPDATE product_category SET name = '传感器', remark = '温湿度/人体/门磁', update_time = NOW() WHERE deleted = 0 AND code = 'sensor'; UPDATE product_category SET name = '门锁', remark = '智能门锁', update_time = NOW() WHERE deleted = 0 AND code = 'lock'; UPDATE product_category SET name = '安防', remark = '报警器/摄像头', update_time = NOW() WHERE deleted = 0 AND code = 'security'; UPDATE product_category SET name = '其它', remark = '未归类', update_time = NOW() WHERE deleted = 0 AND code = 'other';