乱码: 服务器 mysql 客户端在 C locale 下 character_set_client=latin1, 迁移脚本经 Windows type|plink 管道执行时 UTF-8 字节被按 latin1 解读, 中文双重编码。修复: V25/V26 脚本首行加 SET NAMES utf8mb4, deploy-all.bat 的 mysql 调用补 --default-character-set=utf8mb4, 新增 V26 按 code 写回正确中文(幂等)。已验证 product_category.name 的 hex 为正确 UTF-8。 子设备在线: 涂鸦 Mesh/Zigbee 子设备无独立在线通道, SDK 与云端快照对其 online 恒 false, APP 上报后被写成离线。后端新增 resolveEffectiveOnlineStatus —— 上报在线即 online; 子设备上报离线时以父网关为准(父在线则 online); 设备列表输出再做一次父网关聚合, 历史数据立即生效。前端 DeviceInfo 增报 parentDeviceId, 并按品类推断 is_gateway。 APP: 网关下挂设备不再用涂鸦 SDK 快照覆盖后端结论; 列表状态改为在线/离线/状态未知三态; uniapp 端修复状态比大写 ONLINE 导致恒离线、且把状态字符串当 DP JSON 解析的问题。生产验证: JD2BTSA/JD6BTSA 由 offline 变为 online。
33 lines
2.4 KiB
SQL
33 lines
2.4 KiB
SQL
-- =====================================================================
|
||
-- 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';
|
||
|