导出:撤销「给 ZISOCOUNTRYCODE 补空串」——实测空串会让真机拒绝整包
真机对照实验(同一份内容、同一台设备,唯一差异是这一列): 国家码 = '' → 备份恢复失败 国家码 = NULL → **能导入** 也就是说我 2026-09-29 早些时候那个「按真机形状补空串」的改动是有害的回归:真机包里的确有 19 行是 '', 但**导入侧不接受**它(真机自己写出来的形状不代表它能吃回去)。恢复成按站点当前值原样写(新建地点没有 这一项 → NULL),与「被真机接受过的 A 包」一致。 教训记进注释:这一列不要做任何「形状美化」,保持 NULL。
This commit is contained in:
@@ -256,15 +256,11 @@ func patchSQLite(ctx context.Context, db *sql.DB, datasetID int64, sqlitePath st
|
||||
if p.Lat.Valid && p.Lon.Valid && !known["ZLOCATION"][p.SrcPK] {
|
||||
rawLat, rawLon = geo.GCJ02ToWGS84(p.Lat.Float64, p.Lon.Float64)
|
||||
}
|
||||
// 国家码:真机这列从来不写 NULL(未知时写空串,实测 09-28 那份有 19 行是 ''),
|
||||
// 而站点新建的地点没有这一项、导入时 '' 也被折叠成了 NULL —— 写回时按真机的形状补空串,
|
||||
// 别把 NULL 塞回去(那又是它没见过的形状)。
|
||||
country := ns(p.Country)
|
||||
if country == nil {
|
||||
country = ""
|
||||
}
|
||||
// 国家码写成 NULL,**不要**补空串:2026-09-29 实测——只把这一列从 NULL 改成 ''
|
||||
// 就让真机从「能导入」变成「备份恢复失败」(同一份包、同一台设备,唯一差异就是这列)。
|
||||
// 站点新建的地点这一项本来就是 NULL,保持原样最安全。
|
||||
if err := loc.write(p.SrcPK, []any{ns(p.Name), ns(p.Category), nf(p.Lat), nf(p.Lon),
|
||||
country, ns(p.Province), ns(p.City), ns(p.Sublocality), ns(p.Thoroughfare), ns(p.Timezone),
|
||||
ns(p.Country), ns(p.Province), ns(p.City), ns(p.Sublocality), ns(p.Thoroughfare), ns(p.Timezone),
|
||||
lastArrival, rawLat, rawLon},
|
||||
raw); err != nil {
|
||||
return fmt.Errorf("写入地点失败: %w", err)
|
||||
|
||||
Reference in New Issue
Block a user