news 2026/9/25 11:26:31

迷你SQL 2000:老系统迁移的轻量兼容方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
迷你SQL 2000:老系统迁移的轻量兼容方案

简介:迷你SQL 2000是一款面向个人用户和小型企业的轻量级数据库管理系统,专为Windows XP/7/10的32位与64位环境设计,在保留SQL Server 2000核心SQL功能的基础上,大幅降低内存和磁盘占用,适用于硬件配置有限、不需要复杂企业级功能的场景。压缩包共221个文件,大小18.26MB,内部以dll动态库、exe可执行文件为主,同时包含mdf/ldf数据库及日志文件、tdf/tql辅助数据文件等,能够支持软件的安装、启动和日常数据管理操作。目前已有441人学习下载。资源提供数据库引擎和基础管理工具,支持SELECT、INSERT、UPDATE、DELETE等DML语句,以及用于创建和修改表结构的DDL操作;同时具备事务ACID特性,确保数据一致性与完整性,并提供用户权限管理和角色定义机制,保障访问安全。此外还简化了安装与维护流程,可能带有自动备份恢复功能,对数据库初学者和小型企业IT人员来说,是一款轻巧实用、易于上手的解决方案。

1. 迷你SQL 2000:老系统迁移场景里最被低估的轻量方案

企业里至今还有不少跑在 SQL Server 2000 上的老系统:进销存、OA、MIS,十几年的数据全在里面。现在的问题很现实——新环境装不上老库,老库又在现网不敢乱动,新平台却急着要数据。有人为此开虚拟机装完整老版本,然后被许可证、补丁、安全扫描轮流折腾。相比这些重手路,迷你SQL 2000 这类轻量兼容方案是被严重低估的:解压即用、拉起就连接,把历史数据查询、接口对接、离线排障做得很顺手。这篇笔记从一个迁移工程师的角度,把它解决的问题、部署路径、数据迁移和常见坑讲清楚。

2. 选型先于部署:迷你SQL 2000的兼容边界和负载判断

拿到一个迷你发行包就急着解压启动,是很多人的第一反应。实际上选型判断没做完,后面百分百要返工。迷你SQL 2000 不是完整版 SQL Server 2000 的替代品,它的定位更接近“一个能读老语法、跑老代码的轻量环境”。动手前先花十分钟把它的形态和负载边界摸清楚,比省这几分钟重要得多。

2.1 先分清它是“轻量数据库”还是“兼容层”:三个常见误用

市面上的迷你实现大致走两条路线:一是把 SQL Server 2000 的运行文件精简打包,保留核心的查询、存储过程、作业能力,做成解压即用的绿色环境;二是在新引擎上加一层 2000 语法兼容层,把老代码翻译给新引擎执行。前者更贴近原生行为,后者更干净但总有一些语法喂不过去。判断方法很笨但有效:拿一段老存储过程跑一遍,再看引擎有没有翻译日志或兼容层痕迹,基本就能确定是哪种。

围绕这个定位,有三个常见误用需要先说清楚。第一个是把迷你库当生产主库用,它的内存、日志、恢复策略都是按轻量负载调的,撑不住餐点一样的峰值写入。第二个是拿它当新语法验证场,有人习惯把新写的 SQL 丢进迷你库试,查得通就当通过。2000 时代没有窗口函数,也没有 TOP 带括号的写法,ROW_NUMBER()、LAG() 这类新面孔在这里会直接报错或行为怪异,你把新脚本喂进去,得到的“通过”是假通过。第三个误用是拿它当安全边界,迷你库只是轻量,老系统接新平台时接口参数照样要参数化查询,SQL 注入的教训不会因为库小就自动消失。

这三个误用的共同根因是先动手后看边界。兼容层实现尤其明显,它对外看着像 SQL Server,内部可能完全不是那套锁和日志机制,你在上面测出来的行为,拿到生产库上不一定复现。

2.2 适合放进去的负载:历史数据查询、接口对接、离线开发

第一类是历史数据查询。老系统下线后,审计、对账、补数还要偶尔回头看数据。把库迁进迷你环境,按年份归档,查询导出都方便,还不用养一台老虚拟机。这类负载的特点是查询频率低、单次查询数据量大一点也没关系,磁盘够就行。

第二类是接口对接。老库还在现网跑,新系统要读数据,又不想在老库上加服务。常见做法是定期把老库数据同步成一个只读副本,迷你库做这个只读副本的宿体。新系统的查询压力全部落到轻量环境上,老库零负担。做数据同步时有个细节:源库里的空值经常写成 NULL 和空串混着,下游新系统对接时空值经常报错,同步前统一用 ISNULL(column, '') 或 COALESCE 处理一遍,能少接很多半夜告警电话。

第三类是离线开发与测试。新人在自己电脑上练存储过程、练 DDL 恢复,或者排障时需要一个稳定的老语法环境。迷你库不占资源,拉起就结束就丢,不用申请服务器也不用装完整版。这三类负载有个共同点:读多写少、并发低、对恢复能力要求不高。只要接得住这个边界,迷你SQL 2000 就是性价比很高的方案。

2.3 不适合的场景:高并发写入、事务补偿和全文索引

反过来看,哪些场景不建议碰?高并发写入最危险。迷你环境往往用简单恢复模式、较短的检查点间隔来控制体积,大量短事务同时提交时,锁等待和日志增长会互相放大,表现就是锁超时和死锁报表刷屏。我见过有人拿它接订单写入,一个午高峰直接把连接池打满,最后换回完整版才消停。

第二类是复杂事务补偿。跨库事务、长时间事务、需要精确回滚的场景,它的日志空间和恢复机制跟完整版不是一回事,跑着跑着日志满了不是段子。第三类是全文索引、复制发布、分布式查询这类老功能。一些迷你发行包为了瘦身,把组件裁掉了,看着像 SQL Server,实际上这些功能不可用。你在界面上能找到菜单,不代表引擎里有对应的组件。

选型时有一个很直白的判断方法:拿老系统里最常跑的 3 个存储过程和最复杂的 1 张报表查询,放到迷你环境里各跑一遍,对比结果和耗时。跑得动就继续用,跑不动就直接放弃。这个动作花不了半小时,但能省掉后面一星期的折腾。要记住,迁移方案只有合适和不合适,没有“能用就行”。

3. 本地跑通最小实例:免安装部署、启动参数与连接工具

选型定了就落到部署。迷你SQL 2000 用的一贯思路是免安装绿色目录:不写注册表、不注册 Windows 服务。我最常用的部署路径是三步:解压到固定目录、初始化系统库、启动实例。三步走完,一个最小可用的老语法环境就起来了。

3.1 部署形态:绿色目录、初始化脚本与首次启动

目录最好放在无中文、无空格的路径,比如 D:\mini-sql2000 或 /opt/mini-sql2000。很多解析老路径的组件对中文路径有历史遗留问题,解压到 D:\数据\迷你库 这种目录,初始化阶段可能不报错,等到真正读写数据时才莫名失效。目录里通常有启动入口脚本和数据目录,常见做法是入口脚本负责两件事:首次运行时初始化系统库和默认实例;后续拉起进程。初始化过程中可能有一次交互询问实例名和数据目录位置,别一路回车,至少确认数据目录所在磁盘空间够用。

Set-Location D:\mini-sql2000 # 常见做法:入口脚本负责初始化系统库与默认实例 .\setup.cmd init # 启动后台服务进程,日志输出到 logs\mini_sql.log .\setup.cmd start # 确认端口监听情况 netstat -ano | Select-String 1433

这里有个逻辑要理解:init 做的事情相当于创建 master、model、msdb 这些系统库和默认配置文件。这是绿色发行包与原生安装最大的差别——原生安装由安装程序完成这些,这里交给脚本。start 拉起的是当前进程,不注册服务,所以机器重启后需要重新执行 start。netstat 看到 1433 有监听,说明实例起来了。很多次连接失败都是服务没起来就急着连,先看端口永远是最快的确认手段。

如果端口要避开 1433,一般在初始化脚本里传端口参数,比如 .\setup.cmd init --port=14330。改端口后连接串必须显式给端口。端口这事看着小,但老代码里写死了 localhost 的,一旦改掉,所有连接串都要跟着动,建议能保持默认就别动。

3.2 最小连接串:认证策略与加密参数

迷你发行包为了开箱即用,通常默认启用混合认证,sa 账号的初始密码在初始化阶段指定,有的默认空密码。无论如何,第一次连接成功后第一件事就是改 sa 密码或建专用账号,别用 sa 跑业务查询。两类连接串可以各准备一份,C# 侧和新版 ODBC 驱动侧。

Server=localhost,1433;Database=oldsales;User Id=sa;Password=your_pwd;TrustServerCertificate=True
conn = pyodbc.connect( "DRIVER={ODBC Driver 17 for SQL Server};" "SERVER=localhost,1433;" "DATABASE=oldsales;" "UID=sa;" "PWD=your_pwd;" "TrustServerCertificate=yes" )

注意 TrustServerCertificate 这个参数。老协议与新驱动之间最常见的矛盾就是 SSL 加密:2000 年代的服务端没有证书,新驱动又默认要求加密,所以 TrustServerCertificate=True 或 Encrypt=False 往往是能否连上的关键。这个细节后面避坑章还会专门展开,这里先记住一个原则:新驱动连老实例,加密参数基本必调。

3.3 关键启动参数:内存、并行度和检查点间隔

迷你环境的默认参数通常偏保守但未必合适,我一般会调下面三个值,连上后执行 sp_configure。

参数建议值设置理由
max server memory512MB迷你环境内存小,别让缓冲池和查询争抢
max degree of parallelism1老语法环境并行计划容易造成 CPU 毛刺,串行更稳
recovery interval5 分钟强制周期性检查点,控制日志文件增长
user connections200避免极端情况下连接数失控拖垮进程
USE master; GO EXEC sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE; GO EXEC sp_configure 'max server memory', 512; EXEC sp_configure 'max degree of parallelism', 1; RECONFIGURE WITH OVERRIDE; GO

show advanced options 这步先放开高级配置,后面几个参数才允许修改。max server memory 的单位是 MB,512 只是一个入门建议值,数据量大就适当往上加。max degree of parallelism 设为 1,意味着查询计划不会被拆到多个 CPU 上,对迷你环境来说,串行执行比并行执行更好排查问题。recovery interval 设为 5 分钟,是让引擎每 5 分钟做一次检查点,这样日志文件不会无限膨胀。

4. 老数据迁入:备份还原与脚本迁移两条路径的实操参数

环境跑通,接下来是数据。老库迁进迷你SQL 2000 有两条路:备份还原和脚本迁移。备份还原最快,但在版本边界上容易翻车;脚本迁移慢,兼容性最稳。我一般先试还原,还原不行再走脚本。两条路的参数细节都不少,分开讲。

4.1 备份还原:MOVE逻辑文件名、REPLACE与版本边界

还原前先查备份文件里的逻辑文件名,因为源库的数据文件、日志文件逻辑名与迷你目录不一致。直接用 RESTORE FILELISTONLY 查:

RESTORE FILELISTONLY FROM DISK = N'D:\backup\oldsales.bak'; GO

拿到逻辑文件名后再正式还原。这里的关键是 MOVE 子句,把备份里的逻辑文件映射到当前机器的物理路径:

RESTORE DATABASE oldsales FROM DISK = N'D:\backup\oldsales.bak' WITH MOVE 'oldsales_Data' TO N'D:\mini-sql2000\data\oldsales.mdf', MOVE 'oldsales_Log' TO N'D:\mini-sql2000\data\oldsales_log.ldf', REPLACE, RECOVERY; GO

三个参数分别说明。MOVE 是"逻辑名到物理路径"的重定向,目标目录必须存在,目录不存在会报"无法打开物理文件"。REPLACE 告诉引擎允许覆盖同名数据库,只读副本场景常用,但要确认没有在用的库被误覆盖。RECOVERY 表示完成后立即进入可用状态,可以读写。

版本边界是一个大坑。如果备份文件来自 SQL Server 2012、2016 这类更高版本,还原时很可能报"不是有效的备份文件"。这不是包坏了,是还原协议不兼容:2000 时代的引擎只能识别同代或更早的备份格式。热词里常有人问"sql server 2012 的数据库备份 2008 能用吗",方向恰好相反——高版本备份给低版本还原基本不行,低版本给高版本反而可以。迷你SQL 2000 的还原边界通常更严,所以第二个方案更保底。

4.2 脚本迁移:先结构后数据、约束的后置与默认值处理

还原不了时改用脚本。在源库生成脚本时,建议分成两个文件:schema.sql 和 data.sql。schema 里装表、索引、约束、存储过程;data 里只装 INSERT。执行顺序是先 schema 后 data,但这里有个常见做法值得注意:先不带外键约束建表,导完数据再批量加约束。

为什么这样做?因为老数据往往来自多个历史备份合并,导入顺序和自增 ID 的显式插入都会触发外键报错。先关掉约束,导完数据再开启校验,能省掉大量排序问题。

-- 导入前:关闭所有外键约束 EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'; GO -- 导入后:开启并校验外键 EXEC sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL'; GO

sp_msforeachtable 是 2000 时代就有的内部存储过程,迷你发行包大多保留。问号是占位符,遍历每张表。NOCHECK 只是暂时不校验,数据有问题时后面那句 WITH CHECK CHECK 会立刻暴露出来。如果这个存储过程被裁掉了,就只能按依赖关系手动排表顺序。

数据类型和默认值处理是脚本迁移里最容易翻车的点。老库里的 text、ntext、image 类型,迷你环境基本能接,但下游系统读起来不一定认,必要时在查询里转成 varchar(max)。uniqueidentifier 列的默认值,源库常用 NEWID(),脚本导出时默认值脚本偶尔会丢,新插入的行会变成全零 GUID。稳妥做法是建表后单独补一遍默认值:

ALTER TABLE dbo.customer ADD CONSTRAINT DF_customer_id DEFAULT NEWID() FOR customer_id; GO

还有空值处理。源库脚本导出时空值有时写成 NULL,有时写成空串,导入前用 ISNULL 或 COALESCE 统一一下,省得统计报表里出现"看似没有但查不出来"的数据。这些都说明一个道理:脚本迁移看着简单,细节全在数据里。

4.3 排序规则和中文乱码:建库参数与三条验证

中文乱码是历史数据迁移最大的翻车现场,根源经常不在数据文件,而在排序规则和连接串字符集。源库是中文环境,排序规则多半是 Chinese_PRC_CI_AS;迷你库如果用了默认的二进制排序规则,中文字段的排序、where 比较、分组结果都会变得很怪。建库时直接指定是最省事的方式:

CREATE DATABASE oldsales COLLATE Chinese_PRC_CI_AS; GO

Chinese_PRC_CI_AS 表示中文、不区分大小写、区分重音,是老环境最常用的组合。如果库已经建了,可以用 ALTER DATABASE oldsales COLLATE Chinese_PRC_CI_AS 改,但已存在的字符串列可能不受影响。排序规则这类改动,最稳的还是建库时一次定好。

连接串这一侧也要匹配。ODBC 或 JDBC 驱动连接老库时,字符集参数没写对,中文读出问号是常见现象。常见做法是在连接串里指定语言或字符集,C# 系列多用 CharacterSet=UTF-8,ODBC 侧用 Language=Simplified Chinese。核对环境时,执行下面三句,完成前别急着导数据:

SELECT SERVERPROPERTY('Collation') AS server_collation; SELECT DATABASEPROPERTYEX('oldsales', 'Collation') AS db_collation; SELECT * FROM sys.syslanguages; GO

前两行分别看实例和库的排序规则,第三行看引擎认哪些语言。如果前两项出现 SQL_Latin1_General 一类结果,优先改成中文排序规则再导数据,否则后期每个中文查询都会让你怀疑人生。字符集和排序规则是两回事,但很多人把它们混在一起调,调了半天发现是该改建库参数而不是连接参数。

5. 避坑排查:连接失败、日志暴增、单用户模式与慢SQL优化

环境搭好、数据进去,真正磨人的是运行时问题。这里列几条我在迁移和排障里反复遇到的,按现象、原因、解决的顺序写。每一条都对应一类真实翻车,不是从文档里抄来的理论。

5.1 连接失败:SSL加密、端口不通与实例名拼写

现象:新环境使用高版本驱动连接时,直接报"驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:…"。原因:这个错误很典型,老协议不强制加密,而新版驱动默认要求加密,服务端又没有可验证的证书。解决分两步:先确认端口在听,再在连接串里放行非加密连接。

Test-NetConnection 127.0.0.1 -Port 1433

返回 TcpTestSucceeded 为 True,说明进程起来了;False 就回去看启动脚本日志。连接串里按驱动选择 TrustServerCertificate=True 或 Encrypt=False:

Server=localhost,1433;Database=oldsales;User Id=sa;Password=xxx;TrustServerCertificate=True

还有一个被低估的原因是实例名。连接串写成 localhost\SQLEXPRESS 或 localhost\minisql,而迷你环境默认实例没有实例名,直接连 localhost 或 localhost,1433 就行,写实例名反而找不到。排错时把连接串先简化到最小,再一项项加参数,比对着整条长串猜要快得多。也别指望用最新版 SSMS 连所有老实例都丝滑,SSMS 本身只是客户端,版本差异主要体现在驱动的默认加密策略上。

5.2 慢SQL优化:统计信息、索引与执行计划

现象:同一个查询,源库秒回,迷你库跑几十秒。原因:迷你环境默认不会重建统计信息,索引也没有跟着数据导入更新;并行度设置不当,简单查询也会在 CPU 之间来回调度。解决先更新统计信息,再看执行计划:

UPDATE STATISTICS dbo.orders; GO DBCC SHOW_STATISTICS(dbo.orders, idx_orders_orderdate); GO

UPDATE STATISTICS 告诉优化器列的分布已经变了。DBCC SHOW_STATISTICS 能看到直方图的采样情况,采样行数和实际行数偏差大,说明统计信息过期。更直观的验证方式是把查询的 SET SHOWPLAN_ALL 打开,看是走索引查找还是全表扫描:

SET SHOWPLAN_ALL ON; GO SELECT order_id, order_date FROM dbo.orders WHERE order_date >= '2020-01-01'; GO SET SHOWPLAN_ALL OFF; GO

结果里出现 Table Scan,优先看有没有合适的复合索引;出现 Index Seek,基本不需要再加索引。最后提醒一句:不要一上来就加索引,先更新统计信息,很多慢 SQL 是统计信息太旧导致的假慢,加索引反而浪费维护成本。这也是排障顺序的血泪经验:先统计信息,再执行计划,最后才动索引。

5.3 日志文件暴增:恢复模式与检查点

现象:数据文件只有几百 MB,日志文件却涨到好几个 GB,磁盘告警。原因:迷你环境默认或迁移时被改成完整恢复模式,又没有日志备份任务,日志永远不截断。解决两步:

ALTER DATABASE oldsales SET RECOVERY SIMPLE; GO DBCC SHRINKFILE(oldsales_log, 200); GO

简单恢复模式下,每次检查点都会截断已提交事务日志,适合这种读多写少的轻量环境。SHRINKFILE 第二个参数是目标大小,单位 MB。如果日志之前涨得很大,先给一个合理目标值,别一步压缩到过小,否则下一次大批量更新又会立刻撑大日志。这个操作不要在业务高峰做,它会阻塞日志写入。

5.4 单用户模式锁死:“对秘钥无访问权限”与残留连接

现象:数据库被设为单用户模式,或者还原后一直提示"数据库处于单用户模式,无法执行此操作";老安装包在初始化阶段也常出现"对秘钥无访问权限"之类的报错。原因:单用户模式只允许一个连接,排障工具或监控登录把唯一连接占住;而"对秘钥无访问权限"多数是初始化阶段权限不足或临时目录混乱。

解决分清理和预防两段。清理方式:

ALTER DATABASE oldsales SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO ALTER DATABASE oldsales SET MULTI_USER; GO

先强制踢掉其他连接并回滚未完成事务,再切回多用户。执行这两句时,一定要在连接串里留一个空闲连接,否则自己也进不去。预防方式是初始化阶段用管理员账号执行,并且确认解压目录没有放在需要特殊权限的系统目录下。"对秘钥无访问权限"这类报错如果出现在初始化阶段,多半和权限有关,换个普通用户目录重新解压往往就好了。

5.5 备份还原即报错:跨版本与媒体集

现象:拿到一个 .bak 文件,还原时报"不是有效的备份文件"或"媒体集有错误"。原因:备份的 SQL Server 版本高于迷你引擎能识别的协议版本,或者备份文件本身是跨库、拆分卷的媒体集,迷你发行包不支持。解决:先用原版本实例还原,重新生成 schema.sql 和 data.sql 脚本,走脚本迁移。如果连原实例也没有,先问备份是怎么做出来的,是不是用第三方工具压缩过。

Get-FileHash D:\backup\oldsales.bak

这条命令用来校验文件完整性。很多迁移问题最终不是引擎不兼容,而是备份文件本身不完整。先核对哈希再排查引擎,能少走很多弯路。文件哈希一致但还原仍失败,再怀疑版本协议,顺序别搞反。

6. 进阶:把迷你SQL 2000当成兼容性探针与离线回归环境

环境能用之后,我一般不会只把它当一个查询工具箱,而是把它的价值再挖一层:当兼容性探针。迁移老系统时,先用源库把所有存储过程、触发器、视图脚本导出,然后全部在迷你库上跑一遍。它能暴露"表面上兼容、实际语法不兼容"的全部暗礁,比手工 review 脚本高效得多。

批量执行时注意报错收集。按依赖顺序跑 SQL 文件,跑错的文件单独记下来:

Get-ChildItem D:\scripts\*.sql | ForEach-Object { Write-Host "running $($_.Name)" sqlcmd -S localhost,1433 -U sa -P your_pwd -d oldsales -i $_.FullName }

如果发行包只带 osql 不带 sqlcmd,把命令换成 osql 即可。每个 SQL 文件里不要夹杂 GO 之外的客户端指令,否则报错位置难以定位。跑出来的报错清单,就是迁移到生产前要修的兼容问题清单。

最后分享一个我现在的验证习惯:任何新库环境一到位,先跑三条固定语句再谈其他。

SELECT @@VERSION; SELECT SERVERPROPERTY('Collation'); SELECT name, state_desc FROM sys.databases; GO

版本、排序规则、库状态,三件事一次看清。这个习惯是我吃过亏才养成的——有一回帮人接老库,程序报中文乱码,我调了三小时编码参数,最后发现是库排序规则根本不是中文,建库时少写了一个 COLLATE。从那以后,任何新库环境先跑这三条再做别的。省下的时间,远比多敲两句 SQL 多。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 11:24:17

Atlas 300V 24G上部署YOLOv5:从CANN转换到pyACL推理全攻略

最近一直在折腾一台装了 Atlas 300V 24G 的服务器,连续几个晚上在 C 和 Python 之间来回横跳,才总算把 YOLOv5 跑通,延迟也压到了能看的水平。身边朋友知道我在搞这个东西之后,问最多的两个问题,跟你在搜索框里敲的几乎…

作者头像 李华
网站建设 2026/9/25 11:24:12

多商户系统开发全流程实战指南 核心架构设计与落地避坑经验分享

多商户系统是当前本地生活、电商、家政、外卖等多个领域的主流系统架构,相比单商户系统,它支持多主体入驻、权责分离、资源整合,能够大幅提升平台的运营效率。本文结合外卖、家政、电商、CPS服务等多场景多商户系统的开发实战,从核…

作者头像 李华
网站建设 2026/9/25 11:20:26

Windows下Hadoop连接失败?winutils配置与排错全指南

简介:面向需要在Windows本地连接与调试Hadoop集群的开发者,这份zip包提供了2.6.0至3.0.0各版本对应的winutils与hadoop.dll。在Windows上直接运行或调试Hadoop任务时,常因缺少原生Windows组件而报错,使用本包可快速补齐环境依赖&a…

作者头像 李华
网站建设 2026/9/25 11:16:33

AI编程分享:用TaoToken统一Key接入多重计时器 Android App 的配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/25 11:16:28

Manus 平台使用指南:从官网 Demo 拆解 Agent 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华