简介迷你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 --port14330。改端口后连接串必须显式给端口。端口这事看着小但老代码里写死了 localhost 的一旦改掉所有连接串都要跟着动建议能保持默认就别动。3.2 最小连接串认证策略与加密参数迷你发行包为了开箱即用通常默认启用混合认证sa 账号的初始密码在初始化阶段指定有的默认空密码。无论如何第一次连接成功后第一件事就是改 sa 密码或建专用账号别用 sa 跑业务查询。两类连接串可以各准备一份C# 侧和新版 ODBC 驱动侧。Serverlocalhost,1433;Databaseoldsales;User Idsa;Passwordyour_pwd;TrustServerCertificateTrueconn pyodbc.connect( DRIVER{ODBC Driver 17 for SQL Server}; SERVERlocalhost,1433; DATABASEoldsales; UIDsa; PWDyour_pwd; TrustServerCertificateyes )注意 TrustServerCertificate 这个参数。老协议与新驱动之间最常见的矛盾就是 SSL 加密2000 年代的服务端没有证书新驱动又默认要求加密所以 TrustServerCertificateTrue 或 EncryptFalse 往往是能否连上的关键。这个细节后面避坑章还会专门展开这里先记住一个原则新驱动连老实例加密参数基本必调。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; GOshow advanced options 这步先放开高级配置后面几个参数才允许修改。max server memory 的单位是 MB512 只是一个入门建议值数据量大就适当往上加。max degree of parallelism 设为 1意味着查询计划不会被拆到多个 CPU 上对迷你环境来说串行执行比并行执行更好排查问题。recovery interval 设为 5 分钟是让引擎每 5 分钟做一次检查点这样日志文件不会无限膨胀。4. 老数据迁入备份还原与脚本迁移两条路径的实操参数环境跑通接下来是数据。老库迁进迷你SQL 2000 有两条路备份还原和脚本迁移。备份还原最快但在版本边界上容易翻车脚本迁移慢兼容性最稳。我一般先试还原还原不行再走脚本。两条路的参数细节都不少分开讲。4.1 备份还原MOVE逻辑文件名、REPLACE与版本边界还原前先查备份文件里的逻辑文件名因为源库的数据文件、日志文件逻辑名与迷你目录不一致。直接用 RESTORE FILELISTONLY 查RESTORE FILELISTONLY FROM DISK ND:\backup\oldsales.bak; GO拿到逻辑文件名后再正式还原。这里的关键是 MOVE 子句把备份里的逻辑文件映射到当前机器的物理路径RESTORE DATABASE oldsales FROM DISK ND:\backup\oldsales.bak WITH MOVE oldsales_Data TO ND:\mini-sql2000\data\oldsales.mdf, MOVE oldsales_Log TO ND:\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; GOsp_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; GOChinese_PRC_CI_AS 表示中文、不区分大小写、区分重音是老环境最常用的组合。如果库已经建了可以用 ALTER DATABASE oldsales COLLATE Chinese_PRC_CI_AS 改但已存在的字符串列可能不受影响。排序规则这类改动最稳的还是建库时一次定好。连接串这一侧也要匹配。ODBC 或 JDBC 驱动连接老库时字符集参数没写对中文读出问号是常见现象。常见做法是在连接串里指定语言或字符集C# 系列多用 CharacterSetUTF-8ODBC 侧用 LanguageSimplified 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 就回去看启动脚本日志。连接串里按驱动选择 TrustServerCertificateTrue 或 EncryptFalseServerlocalhost,1433;Databaseoldsales;User Idsa;Passwordxxx;TrustServerCertificateTrue还有一个被低估的原因是实例名。连接串写成 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); GOUPDATE 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 多。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
基于Flask+uniapp的校园跑腿小程序:设计、实现与部署实战 1. 项目全貌与整体设计思路1.1 校园跑腿这件事,到底在解决什么问题先说一个我自己的观察。校园里“跑腿”这个需求,天然就比社会面上的同城跑腿更集中、更高频、更低门槛。宿舍到菜鸟驿站取个快递、食堂高峰期带一份饭、打印店代打资料、超市代买日用品&… · 2026/9/25 11:26:36
信创环境也能跑Data Agent:帆软Dora打造可控可核查的企业AI分析链路 AI 问数很热,但有一类企业,一直站在门外。央国企、金融、政务,这些对数据安全有强要求的企业,不是不想用 AI 分析,而是不敢用——不是担心 AI 不够聪明,而是担心两件事:数据能不能留在内网&… · 2026/9/25 11:26:30
朝阳区广受信赖的厨卫局改专业公司用户力荐,成立多年靠谱省心 北京乐桥装饰装修有限公司作为北京本地深耕厨卫局部翻新的实体服务商,核心业务聚焦老房厨卫翻新、标准化家修吊顶拆装、厨卫局部改造、家电配套改造等厨卫局改相关服务,为老旧小区住户、家电换新家庭等客群提供一站式的厨卫焕新解决方案。企业基础概况北… · 2026/9/25 12:06:38
Oracle 12c Windows客户端静默安装与OCI环境配置实战 简介:本资源为Oracle Database 12c官方Windows 64位客户端完整安装包,面向数据库管理员、Java/PL/SQL开发者及企业级应用运维人员,解决跨平台连接Oracle数据库、执行SQL/PLSQL、配置网络服务等核心需求。压缩包含1144个文件,主体为… · 2026/9/25 12:06:38
杭州滨江口碑好的全屋设计定制服务商推荐:忆家家居(宁围展厅)服务覆盖实力 在杭州滨江准备装修全屋定制,不少业主都会反复搜索几个问题:杭州滨江哪里能找到口碑靠谱的全屋设计定制服务商?本地做全屋整装,哪些细节是容易踩坑的?选服务商的时候,哪些硬实力是必须要确认的?Q1:杭州滨江业主找全… · 2026/9/25 12:06:38
VS2019下VB.NET用ADO.NET读写SQL Server数据库实战源码详解 简介:基于VS2019开发的VB.NET例程源码,面向需要在.NET环境中快速操作SQL Server 2014数据库的开发人员,尤其适合正在学习数据库编程或准备工程落地的初学者。利用自定义FUNCTION函数封装读取与写入逻辑,运行后可直接查询数据库并显… · 2026/9/25 12:06:38
5G NR SIB2深度解析:小区重选参数、调度机制与排查实践 简介:面向5G网络优化与运维工程师的系统消息SIB2专项讲解文档,围绕NR小区重选场景,梳理了SIB2从系统消息分类到信息单元的核心内容。文档结合3GPP 38.304等规范,说明了SIB2经BCCH、DL-SCH、PDSCH的传输链路,以及SI-RNT… · 2026/9/25 12:06:32
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* 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 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* 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 1:00:37