MySQL反斜杠转义全解析:从字符串插入到LIKE查询的避坑指南

先交代一个真实翻车现场。有天业务方发来一张截图,某张配置表里的 Windows 路径字段,原本应该是C:\Users\某应用目录\data\config.ini,结果库里存成了C:Users某应用目录dataconfig.ini,所有反斜杠集体失踪。我一开始以为是应用层写了什么 trim 函数,查了一圈才发现,问题出在一条 INSERT 语句上——就是那个看起来人畜无害的反斜杠\,在 MySQL 里它是转义字符,不是普通字符。

这篇文章准备把 MySQL 里反斜杠的各种坑一次性说清楚:字符串字面量、LIKE 查询、JSON 字段、正则匹配、CSV 导入,还有那个让人防不胜防的NO_BACKSLASH_ESCAPES模式。每个场景我都会按自己踩坑的顺序讲,尽量给出一眼就能看懂的写法和排查套路。如果你也被\\、\\\\这种连续反斜杠绕晕过,这篇应该能帮你省下不少时间。

1. 一次路径字段的"集体失踪":INSERT 里的反斜杠去哪了

1.1 最小复现:两条 INSERT 的差距有多大

先建一张最简单的表:

CREATE TABLE t_path ( id INT PRIMARY KEY, file_path VARCHAR(200) );

然后执行两条看起来差不多的 INSERT:

INSERT INTO t_path VALUES (1, 'C:\Users\某应用目录\data\config.ini'); INSERT INTO t_path VALUES (2, 'C:\\Users\\某应用目录\\data\\config.ini');

接着查一下结果:

SELECT id, file_path, LENGTH(file_path) AS len FROM t_path;

结果会让你非常想摔键盘:

idfile_path 实际值len
1C:Users某应用目录dataconfig.ini明显变短
2C:\Users\某应用目录\data\config.ini正常

第一条记录里的反斜杠全部消失了,而且不是变成别的字符,是直接没了。第二条记录才是我们想要的结果。

问题就出在第一条 INSERT 的字符串字面量'C:\Users\某应用目录\data\config.ini'上。

1.2 为什么 MySQL 要让反斜杠"有身份"

MySQL 在解析字符串字面量时,沿用了 C 语言风格的转义规则。也就是说,在单引号字符串内部,反斜杠并不是一个普通字符,而是一个转义标记:

  • '\n'表示换行符
  • '\t'表示制表符
  • '\''表示单引号本身
  • '\\'表示一个反斜杠字符

如果反斜杠后面跟的不是这些特殊序列,MySQL 不会报错,而是悄悄把反斜杠忽略掉。比如'\U'会被解析成'U','\a'会被解析成'a'。

所以'C:\Users\某应用目录'在 MySQL 眼里,其实是:C:+U(前面的反斜杠被丢弃)+sers+某应用目录。这就是路径变成C:Users某应用目录的根本原因。

可以做个简单类比:反斜杠像一个功能键。你单独按一下功能键,后面的字母就会变成"快捷指令";如果你只是想输入反斜杠本身,就必须按两次。MySQL 里的规则一模一样。

1.3 字符串字面量的反斜杠对照表

下面这张表建议收藏,日常写 SQL 时基本够用:

想要的字符SQL 写法说明
一个反斜杠\'\\'两个反斜杠表示一个
两个连续反斜杠\\'\\\\'四个反斜杠表示两个
换行符'\n'C 风格转义
制表符'\t'C 风格转义
单引号'\''或''''第二个写法是 SQL 标准
Windows 路径C:\Users\app'C:\\Users\\app'每个反斜杠都要双写
保留字面量\%或\_'\%'/'\_'在 LIKE 中另有用途,后面会讲

所以,最简单正确的路径插入方式就是:

INSERT INTO t_path VALUES (2, 'C:\\Users\\某应用目录\\data\\config.ini');

如果你的 SQL 是动态拼接出来的,那就要格外小心。因为在代码里写路径,本身还有一层语言的字符串转义在等着你,后面单独说。

2. LIKE 查询里的反斜杠:SQL 转义一次,模式匹配又转义一次

如果说插入只是"丢了反斜杠",那 LIKE 查询这边的坑就更隐蔽了:你写了自以为正确的反斜杠,结果查出来的却是另一批数据。

2.1 两层解析是怎么叠加的

LIKE 的匹配模式和普通字符串不一样。它先经过第一层 SQL 字符串解析,然后还要经过第二层 LIKE 模式解析。

MySQL 的 LIKE 默认用反斜杠作为通配符%和_的转义字符。也就是说,\%表示匹配一个百分号字面量,而不是通配符;\_同理。这个设计很好理解,但问题是:反斜杠自己也被转义了两次。

我直接说结论:在 LIKE 中,想要匹配一个反斜杠字符本身,SQL 里需要写四个反斜杠'\\\\'。

拆开来看:

  • 写四个反斜杠'\\\\'
  • SQL 字符串解析器吃掉一半,剩下两个反斜杠
  • LIKE 模式再把\\解析为一个字面量反斜杠

这就是为什么你写'%\\%'发现查不到含反斜杠的数据,很可能不是没数据,而是反斜杠数量不够。

2.2 一张表说清 LIKE 里的转义写法

想匹配的内容SQL 写法匹配效果
包含字面量%LIKE '%\%%'匹配5%、完成%
包含字面量_LIKE '%\_%'匹配a_b
包含一个反斜杠\LIKE '%\\\\%'匹配C:\Users
以C:\开头LIKE 'C:\\\\%'匹配C:\Users\...
整个字符串就是一个\LIKE '\\\\'精确匹配反斜杠

这里最容易搞混的是\%和\\\\的关系。很多新人以为'%\%'是匹配含反斜杠的行,其实'\%'在 LIKE 里表示"一个字面量百分号"。所以'%\%'匹配的是含%的字符串,和反斜杠一点关系都没有。

2.3 绕开双重转义:自己指定 ESCAPE 字符

如果你觉得四个反斜杠太难数,可以主动指定一个业务数据里基本不会出现的字符作为 LIKE 的 ESCAPE 字符。

例如,想匹配包含%的记录:

SELECT * FROM t_name WHERE name LIKE '%/%%' ESCAPE '/';

这里的/是转义符,/%表示字面量百分号,前后的%还是通配符。这个语法瞬间清爽很多。

同理,匹配包含反斜杠的记录时,如果指定了 ESCAPE/,反斜杠就只是普通字符,可以这么写:

SELECT * FROM t_name WHERE name LIKE '%\%' ESCAPE '/';

这行的逻辑是:%通配任意前缀,中间的\是普通字符,最后的%通配任意后缀。注意这里能生效的前提是转义符已经是/,反斜杠不再承担转义任务。

指定 ESCAPE 字符后,默认的\%、\_转义规则就失效了,所以使用时一定要统一,不要混用。

3. 覆盖四个高频踩坑场景:路径、JSON、正则、CSV 导入

除了基本 INSERT 和 LIKE,反斜杠最坑人的地方通常集中在四个场景里。我把每个场景的实际表现和正确写法都列出来。

3.1 Windows 路径:代码里已经写对了,拼出来还是错

假设你用 Python 拼 SQL 插入路径:

path = "C:\\Users\\某应用目录\\data\\config.ini" # 真实值是 C:\Users\某应用目录\... sql = "INSERT INTO t_path VALUES (1, '%s')" % path

这段代码执行后,传给 MySQL 的字符串是'C:\Users\某应用目录\data\config.ini',也就是只带一个反斜杠的版本。MySQL 解析时又会把\U、\某前面的反斜杠丢弃,最终存入库的还是缺反斜杠的数据。

这就是语言字符串转义和 MySQL 字符串转义的叠加问题:你为了在 Python 里得到正确的\,已经写了\\;但拼进 SQL 后,MySQL 还要再解析一次,于是结果又回到了错误状态。

解法有两个方向:

  1. 用参数化查询,不要把值拼进 SQL。Python 的 pymysql、Java 的 PreparedStatement、Go 的 database/sql 都可以直接传真实路径C:\Users\某应用目录\...,MySQL 会原样接收。
  2. 如果必须手拼 SQL,先对反斜杠做一次转义:
escaped_path = path.replace("\\", "\\\\") sql = "INSERT INTO t_path VALUES (1, '%s')" % escaped_path

这样生成的 SQL 是'C:\\Users\\某应用目录\\data\\config.ini',MySQL 解析后存下的才是C:\Users\某应用目录\data\config.ini。

3.2 JSON 字段:JSON 转义和 SQL 转义叠在一起,多一层就错

JSON 本身也把反斜杠当作转义符。比如要表示一个反斜杠字符,JSON 内部必须写成\\。当这个 JSON 文档作为字符串插入 MySQL 时,SQL 层又要把这两个反斜杠各双写一次,所以 SQL 里最终要写四个连续反斜杠。

看正确示例:

INSERT INTO t_json (jdoc) VALUES ('{"path":"C:\\\\Users\\\\某应用目录"}');

这行 SQL 最终把 JSON 文档{"path":"C:\\Users\\某应用目录"}存入 JSON 列,JSON 解析后的path值是单反斜杠的C:\Users\某应用目录。

少写一层的典型事故是这样的:

INSERT INTO t_json (jdoc) VALUES ('{"path":"C:\\Users\\某应用目录"}');

SQL 解析后,JSON 原文变成{"path":"C:\Users\某应用目录"}。这串文本里的\U并不是合法的 JSON 转义序列,MySQL 在 json 字段校验时要么报错,要么存进一个语义已经被破坏的文档。

读 JSON 字段时也要注意:JSON_EXTRACT(jdoc, '$.path')返回的是已经解码过的字符串,里面的反斜杠又变回单反斜杠。如果你把这个结果再拼到别的 SQL 里,反斜杠又要重新转义一次。

3.3 正则匹配:正则有转义,SQL 也有转义

MySQL 的REGEXP运算符同样绕不开反斜杠。正则引擎要匹配一个反斜杠本身,正则表达式里必须写\\;这个正则表达式作为 SQL 字符串,又得把每个反斜杠双写一次,最终 SQL 里是'\\\\'。

例如判断字符串中是否包含反斜杠:

SELECT 'C:\Users' REGEXP '\\\\';

返回 1,表示匹配成功。

再比如匹配数字,很多人会写:

SELECT '123' REGEXP '\d';

这条语句很可能返回 0。原因很简单:SQL 解析'\d'时,\d不是 MySQL 的转义序列,反斜杠会被丢弃,正则引擎最后收到的是d,匹配的是字母 d,而不是数字。

正确写法是:

SELECT '123' REGEXP '\\d';

写两个反斜杠,SQL 层剥掉一层,正则引擎收到\d,这才是数字模式。

不过说句实在话,为了少被这种双重转义折磨,正则里能不用\d、\w这种转义类就不要用,直接用 MySQL 的字符类更稳:

SELECT '123' REGEXP '[[:digit:]]';

含义一致,但避开了反斜杠的问题。

3.4 CSV 导入:LOAD DATA 默认的转义符也在背后捅刀

用LOAD DATA INFILE导入 CSV 时,MySQL 默认配置是FIELDS ESCAPED BY '\\',也就是把反斜杠当作字段转义字符。

如果 CSV 里有一行:

C:\Users\某应用目录\data\config.ini

导入后,\U和\某前面的反斜杠会被当转义符消耗掉,库里存下来的又是C:Users某应用目录dataconfig.ini。

解决思路有三个:

  1. 导出 CSV 时把反斜杠双写,比如写成C:\\Users\\某应用目录\\data\\config.ini,让 LOAD DATA 解析后还原成单反斜杠。
  2. 导入语句里指定FIELDS ESCAPED BY '',直接关掉反斜杠转义,但这会让 CSV 其他字段的转义行为改变,要评估影响。
  3. 导入前用编辑器或脚本对文件统一处理。

我个人最推荐第一种,因为它保持默认行为,对字段内引号等字符的转义影响最小。

4. NO_BACKSLASH_ESCAPES 模式:最隐蔽的环境不一致坑

4.1 这个开关一开,反斜杠直接从"特殊字符"变回普通字符

MySQL 的 SQL 模式里有一个NO_BACKSLASH_ESCAPES。它的作用非常直接:关闭反斜杠在字符串字面量中的转义功能。

正常模式下:

SELECT '\\'; -- 返回一个反斜杠

开启NO_BACKSLASH_ESCAPES之后:

SET SESSION sql_mode = 'NO_BACKSLASH_ESCAPES'; SELECT '\\'; -- 返回两个反斜杠

看到区别了吗?同一个 SQL,换成这个模式后,含义完全不同。原本"两个反斜杠表示一个反斜杠",会变成"两个反斜杠就是两个反斜杠"。

如果你在代码里写:

INSERT INTO t_path VALUES (1, 'C:\\Users\\某应用目录');

开发环境没开这个模式,存的是C:\Users\某应用目录,一切正常。但线上库如果开了NO_BACKSLASH_ESCAPES,同样的 SQL 存进去的是C:\\Users\\某应用目录,反斜杠数量翻倍。程序读取后拿去拼文件路径,找不到任何文件。

真正的坑在于:这个差异不报错。SQL 能正常执行,只是数据内容变了。你光看数据库查询结果,很容易以为只是字符串里多了几个反斜杠,很难想到是 SQL 模式的问题。

4.2 排查思路:先看 sql_mode 是否一致

遇到反斜杠数据异常,建议第一时间检查 SQL 模式:

SELECT @@GLOBAL.sql_mode AS global_mode, @@SESSION.sql_mode AS session_mode;

如果结果里出现了NO_BACKSLASH_ESCAPES,那基本可以确定是这个模式导致的行为差异。

生产环境一般不建议开启这个模式。MySQL 默认是不开这个开关的,绝大多数语言驱动也没开。如果确实因为标准 SQL 兼容性的原因开了,那就要把规则立清楚:应用层一律用参数化查询传真实字符串,手写 SQL 中不要依赖反斜杠转义。

有一点要提醒:参数化查询解决的是 SQL 字符串解析层的问题。对于 LIKE 查询,即使你用参数传值,传入的 pattern 依然会经过 LIKE 的模式解析。所以要匹配字面量%时,参数里仍要传\%;要匹配反斜杠时,仍要传\\。这一点不要误以为参数化后就完全不用管转义了。

4.3 开启前后,同一个 SQL 的表现差异

场景正常模式NO_BACKSLASH_ESCAPES
SELECT '\\'1 个反斜杠2 个反斜杠
SELECT '\n'换行符\n两个普通字符
INSERT 'C:\\Users'存C:\Users存C:\\Users
LIKE '%\\\\%'匹配含反斜杠语义变化,可能匹配反斜杠加任意字符

最后一行要特别说明:在NO_BACKSLASH_ESCAPES下,LIKE 的默认反斜杠转义行为也会被影响。这也是为什么一旦开启这个模式,手写含反斜杠的 LIKE 和正则都容易变成行为差异的重灾区。

5. 实操总结:让反斜杠不再"坑"你的几条纪律

5.1 能参数化,就别手拼 SQL

反斜杠的坑,根源大多在于"字符串经过多层解析"。参数化查询把值和 SQL 模板分离,字符串不再经过 SQL 语法解析,能直接绕开大部分字面量问题。

近几年的项目里,我几乎所有涉及路径、JSON、备注字段的写入都改成了参数化。唯一的例外是批量导入场景,但导入时也会用上面的双写方案处理。

唯一需要记住的是 LIKE 的特殊性。参数化只解决第一层解析,LIKE 的 pattern 语义还是要自己保证。

5.2 用 HEX() 验证反斜杠的真实个数

当你不确定数据库里到底存了几个反斜杠时,别用肉眼看,直接用十六进制验证。

反斜杠\的十六进制编码是5C。例如:

SELECT id, HEX(file_path) FROM t_path;

如果某行内容应该是C:\Users,那么 HEX 结果里应该有43 3A 5C 55 73 65 72 73,注意中间那个5C就是反斜杠。

如果发现本该一个反斜杠的位置出现了5C5C,说明多存了一个,数据被额外转义过一次。

这个排查技巧特别适合处理线上稀奇古怪的路径字段,比反复 SELECT 然后数斜杠快得多。

5.3 手写 SQL 自查清单

最后整理一份短清单。每次手写含反斜杠的 SQL 前,先对照一遍:

场景正确写法常见错误
插入一个反斜杠'\\''\',被丢弃或报错
插入 Windows 路径'C:\\Users''C:\Users',反斜杠被吞
LIKE 匹配含反斜杠'%\\\\%''%\%',含义变成匹配百分号
LIKE 匹配字面量%'%\%%''%%%',变成匹配所有
正则匹配反斜杠REGEXP '\\\\'REGEXP '\\',正则层少一层
正则匹配数字REGEXP '\\d'REGEXP '\d',反斜杠被 SQL 丢弃
JSON 字段存路径'{"p":"C:\\\\Users"}'少写一层,变成非法 JSON 或错误值

5.4 最后的个人习惯

踩过太多次反斜杠的坑之后,我现在看到一个 SQL 里连续出现多个反斜杠,会按两层去拆:先想 SQL 解析器会剥掉几层,再想 LIKE 或正则的解析器会剥掉几层。剥完之后剩下的,才是真正要表达的内容。

另外,凡是入库的路径字段,我都会先问一句:这个路径是不是一定要用反斜杠?如果业务上允许,直接统一存正斜杠C:/Users/某应用目录/data/config.ini是最省心的方案,Windows 和绝大多数应用都能正常识别,还能从根上避开 MySQL 反斜杠转义的连环坑。当然,如果下游组件强制要求反斜杠,那还是老老实实按上面的规则来。

相关新闻

电商评论情感分析实战:从数据清洗到BERT蒸馏部署全记录

电商评论情感分析实战:从数据清洗到BERT蒸馏部署全记录

这个项目标题一看就是从实战里踩出来的,数据坑、部署、硬核笔记,说明作者真刀真枪跑过完整链路,不是拿公开数据集跑个demo就完事。文本分类和情感分析在NLP里属于入门必练但做好极难的方向,难就难在数据永远是脏的、标签永远是偏的…

2026/10/20 17:19:49 阅读更多 →
TensorFlow工业级AI工程实践:从计算图到TFX流水线

TensorFlow工业级AI工程实践:从计算图到TFX流水线

1. 这不是“学个框架”那么简单:TensorFlow到底在解决什么问题?很多人第一次听说TensorFlow,是在某次技术分享会上听到“谷歌开源的深度学习框架”,或者在招聘JD里看到“熟悉TensorFlow者优先”。但如果你真去翻它的GitHub仓库、读…

2026/10/20 17:19:49 阅读更多 →
双线性插值原理与C语言实现:图像缩放算法详解

双线性插值原理与C语言实现:图像缩放算法详解

简介:这份资源围绕双线性插值方法及实现展开,面向图像处理、计算机图形学与数值计算方向的学习者,尤其适合希望用C语言理解插值数学原理并动手实现的开发者。包内共31个文件,以h头文件、cpp源文件、obj目标文件为主,辅…

2026/10/20 17:19:49 阅读更多 →

最新新闻

Appium移动端自动化测试环境搭建全攻略:Python+Android+Node.js实战

Appium移动端自动化测试环境搭建全攻略:Python+Android+Node.js实战

1. 先把环境装好,再谈自动化 做移动端自动化测试,很多人一上来就急着写脚本,结果真正动手时,光是环境安装就把热情消磨了大半。Appium Python Android Node.js这套组合,几乎每个部件都有自己的版本要求、环境变量和…

2026/10/20 18:10:34 阅读更多 →
QTTabBar、Office Tab与Quicker:告别Windows多窗口混乱,提升办公效率

QTTabBar、Office Tab与Quicker:告别Windows多窗口混乱,提升办公效率

1. 写在最前面:为什么你的Windows办公效率上不去先问一个问题:你每天要在这台电脑上打开多少个文件夹窗口?要在这几个窗口之间来回切换多少次AltTab?Word、Excel来回改的时候,任务栏上挤了多少个窗口?如果你…

2026/10/20 18:10:34 阅读更多 →
AI短剧创作教程源码包:从剧本到成片的自动化流水线

AI短剧创作教程源码包:从剧本到成片的自动化流水线

简介:AI短剧创作教程源码包,专为希望借助AI工具快速产出短剧的内容创作者与开发者设计。资源围绕AiPy工具,覆盖从故事主题设定、提示词生成剧本,到旁白与分镜头视频制作、人物一致性维护,直至音视频合成出片的完整流程…

2026/10/20 18:10:34 阅读更多 →
本体驱动开发:让AI应用先有一份清晰的领域宪法

本体驱动开发:让AI应用先有一份清晰的领域宪法

最近在整理ontology-driven-dev这个开源项目时,发现一个很有意思的现象:很多人第一眼看到"本体驱动"四个字,要么觉得是学术论文里才有的概念,要么直接把它和知识图谱划等号。但实际上,在做AI原生应用开发的过…

2026/10/20 18:10:34 阅读更多 →
C++利用链表模板类实现简易队列

C++利用链表模板类实现简易队列

前言 队列(queue)是先进先出(first in, first out, FIFO)的线性结构:只在尾部插入,只在头部删除。用链表实现队列的好处是插入和删除都是 O(1),不需要像动态数组那样在头部删除时搬移元素&#…

2026/10/20 18:10:34 阅读更多 →
用Mock测试解决接口依赖问题:从工具选型到落地实践

用Mock测试解决接口依赖问题:从工具选型到落地实践

做接口联调这么多年,最烦的一件事就是“等”。前端等后端接口,后端等第三方服务,测试等环境稳定,最后所有人都在等别人。尤其是前后端并行开发那阵子,接口契约刚定完,前端已经把页面写了一半,后…

2026/10/20 18:09:32 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/20 9:50:45 阅读更多 →