MySQL 5.7 Docker容器中文乱码根治:从字符集配置到编码转换全链路排查
部署旧版本系统时MySQL 5.7 在 Docker 容器里的乱码问题我前前后后碰了不下十次。每次帮别人排查症状都差不多数据写进去是好的读出来变???或者网页上显示锟斤拷又或者 API 返回的 JSON 里中文直接成了乱码。最气人的是你在容器里用命令行查明明显示正常一到业务系统里就坏。这篇文章就把我积累下来的完整排查和修复思路写清楚从 Docker 镜像构建、MySQL 配置文件、历史数据转换到应用层的连接串和字符集设置一条链路全部捋一遍。适合正在维护旧系统的运维、后端开发也适合刚接触 Docker 部署、被乱码问题折磨的新手参考。先给结论MySQL 5.7 在 Docker 里的乱码九成以上不是单一原因而是三个层面交叉作用的结果——容器环境、服务端配置、连接层或应用层。你只有把链路全部对齐到 utf8mb4问题才算真正根治。1. 乱码问题为什么总在 MySQL 5.7 上爆发先说个反直觉的事实MySQL 5.7 本身对 utf8mb4 的支持已经相当成熟但它部署在 Docker 里之后默认配置仍然是 latin1这是乱码问题最根源的起点。MySQL 5.7 的官方 Docker 镜像如果你不显式指定任何字符集相关参数那么character_set_server、character_set_database默认都是 latin1。 latin1 是啥它是西欧单字节编码根本不包含中文字符的映射。这就好比你开了一家咖啡馆老板坚持用一份只写英文单号的点单系统客人用中文下单系统要么只能显示成问号要么干脆存成乱码。而 MySQL 5.7 又恰恰是国内大量老旧系统还在使用的版本很多业务系统从物理机或者虚拟机迁到 Docker 时直接把原来的数据目录挂载进容器字符集问题就跟着一起搬家了。更麻烦的是乱码问题的链路特别长。一个 SQL 查询从客户端发出到数据库返回结果中间经过的环节包括容器系统环境locale、MySQL 服务端启动参数character_set_server、库表字段的 charset 和 collation、连接层的 character_set_client 和 character_set_results甚至客户端工具自身的连接参数。任何一个环节不一致最终都表现为乱码。所以别指望把建表语句加上 utf8mb4就能解决所有问题。那只是其中一环而且只对新建的表有效对已经存在的历史数据毫无作用。下面我按环境准备、完整修复链路、历史数据转换、连接层应用层排查、实测踩坑记录这五个部分来拆解。每一部分你都可以直接照做不需要再去看别的资料。2. 环境准备摸清你手上的现场情况动手之前先花十分钟确认现状。这一步很多人跳过结果改了半天配置也不知道到底是哪个环节生效的。下面是最低限度的排查动作照着做一遍基本能定位问题层次。2.1 确认 MySQL 版本与当前字符集现状先进入容器查看当前环境下的字符集配置情况docker exec -it mysql5.7-container mysql -uroot -p进入 MySQL 命令行后执行SHOW VARIABLES LIKE character_set%; SHOW VARIABLES LIKE collation%; SELECT VERSION();在没有任何额外配置的容器里很可能会看到类似这样的一组输出变量名值character_set_clientlatin1character_set_connectionlatin1character_set_databaselatin1character_set_filesystembinarycharacter_set_resultslatin1character_set_serverlatin1character_set_systemutf8character_sets_dir/usr/share/mysql/charsets/注意最后一行character_set_system是 utf8这个别动它是 MySQL 内部存储元数据用的跟业务乱码没有关系。如果输出是这种情况即 server、database、client 全是 latin1那么乱码基本板上钉钉了。如果你发现已经是 utf8mb4那说明服务端配置没问题重点转向连接层或者历史数据层面。2.2 检查库表结构和历史数据的真实落盘状态很多旧系统不是新装而是从物理机、虚拟机迁移到 Docker 的光看会话级变量不够还得确认库表结构以及历史数据到底是以什么编码写入的。执行下面两条 SQL 分别查看SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_SCHEMA 你的库名; SHOW CREATE TABLE 你的表名\G重点看CHARSET和COLLATE这两项。如果是 utf8 而不是 utf8mb4这种情况说明老系统当初用的是 MySQL 5.5/5.6 时代的默认配置那时候的 utf8 实际上是 utf8mb3存在不了 emoji 和部分生僻字。如果干脆是 latin1那问题更严重历史数据本身就已经错乱了。因为数据字节在物理层面就是以 latin1 编码写入的就算你后面把服务端配置全改成 utf8mb4旧数据读出来依然是乱码。这里需要区分两种情况。一种是历史数据在物理层面是好的只是读取时由于连接层或者服务端配置不对导致显示乱码这种改配置就能解决。另一种是历史数据本身写在物理层面就是错乱的比如源系统用的是 GBK但 MySQL 表结构声明的是 latin1这种光改配置没用必须做数据转换。怎么判断是哪一种看物理字节就行。用HEX()函数抽查几条记录SELECT id, HEX(某个中文字段) FROM 你的表 LIMIT 5;如果中文字段的实际内容为你好那么合法的 UTF-8 编码对应十六进制是E4BDA0E5A5BD。如果看到的是C4E3BAC3这种是 GBK 编码的字节。看到3F之类说明数据在写入时就已经变成了问号属于不可逆的丢失。2.3 按链路分层列出排查清单动手前我习惯把问题拆层每层都有明确检查项和常见症状后面每一步操作对应哪层一目了然层面检查项常见问题操作系统环境容器 locale、/etc/mysql/配置目录基础镜像默认语言不是 UTF-8MySQL 服务端character_set_server、collation_server默认 latin1未指定 utf8mb4库表结构库 charset、表 charset、列 charset库是 utf8 但表是 latin1连接会话client、connection、results 三个变量客户端工具或连接池未指定 utf8mb4历史数据物理字节编码写入源头就错需转码这张表就是后续所有操作的地图。你先明确自己卡在哪一层再对应处理不要想着一把梭全改。3. 完整修复链路从镜像构建到容器启动我推荐的思路是不要手动进容器改配置容器一重建全丢。正确做法是把字符集配置固化到镜像和启动参数里让它从创建那一刻就是对的。下面这条链路走完新写入的数据基本就不会再乱码了。3.1 方案A自定义 Dockerfile最推荐既然目标是把旧系统部署成可复现的环境镜像就应该自带正确配置。基于官方mysql:5.7镜像写一个 DockerfileFROM mysql:5.7 # 自定义配置文件覆盖默认配置 COPY my.cnf /etc/mysql/conf.d/01-my.cnf # 设置容器环境语言避免命令行工具层面再出乱码 ENV LANGC.UTF-8这里的核心是my.cnf内容如下[mysqld] character-set-server utf8mb4 collation-server utf8mb4_unicode_ci init_connect SET NAMES utf8mb4 [client] default-character-set utf8mb4 [mysql] default-character-set utf8mb4逐项解释一下这些配置的作用。character-set-server决定服务端在新建数据库和新建表时采用的默认字符集。注意它只影响新建的对象对于已经存在的 latin1 库表不生效。collation-server是配套排序规则。utf8mb4_unicode_ci是通用选择兼容性最好对 5.7 来说是稳妥的。utf8mb4_0900_ai_ci是 MySQL 8.0 时代引入的5.7 上不识别所以旧环境别用。init_connect会在每个连接建立后自动执行一句SET NAMES utf8mb4把连接层三个变量client、connection、results一次性拨正这是最容易漏掉的一环。[client]和[mysql]段里的default-character-set保证了通过容器内命令行工具连接时客户端自身也是 utf8mb4。注意init_connect对拥有 SUPER 权限的账号不生效比如 root。如果你用 root 登录后发现连接层变量还是 latin1不用慌这是设计行为。拿普通业务账号连接测试即可。很多人在这一步被误导以为是配置没生效其实不是。3.2 方案B不写 Dockerfile直接用 docker run 参数如果只是临时验证或者不想维护镜像启动命令里直接附加参数也能达到同等效果docker run -d \ --name mysql5.7-container \ -e MYSQL_ROOT_PASSWORDyourpassword \ -e TZAsia/Shanghai \ -p 3306:3306 \ -v /data/mysql:/var/lib/mysql \ -v /data/mysql-config:/etc/mysql/conf.d \ mysql:5.7 \ --character-set-serverutf8mb4 \ --collation-serverutf8mb4_unicode_ci关键点有两处。第一-v /data/mysql-config:/etc/mysql/conf.d把宿主机上的配置文件挂进去你可以在宿主机上维护一份01-my.cnf。第二末尾的--character-set-server和--collation-server会作为 mysqld 的启动参数传入覆盖默认值。我实测下来两种方案对新库新表的效果完全一致。区别在于可维护性。Dockerfile 方案更适合团队交付使用任何人 pull 下来都能复现一致环境不会出现我本机没问题啊的甩锅现场。个人调试用docker run参数方便快捷正式环境请走 Dockerfile。3.3 首次初始化时的默认建库语句最容易踩坑官方mysql:5.7镜像在首次启动时会读取MYSQL_DATABASE环境变量并执行对应的建库操作。问题在于这个初始化动作的默认字符集继承自服务端当前配置。如果镜像内置的全局配置不是 utf8mb4就算你指定了MYSQL_DATABASElegacy_db建出来的库也可能是 latin1。解决方式前面已经埋下伏笔在01-my.cnf里配置好character-set-server utf8mb4之后再配合环境变量使用docker run -d \ --name mysql5.7-container \ -e MYSQL_ROOT_PASSWORDyourpassword \ -e MYSQL_DATABASElegacy_db \ ...这样初始化脚本执行CREATE DATABASE legacy_db时会继承服务端的character_set_server默认值库的默认字符集就正确了。如果你想显式指定不同的排序规则可以后续再执行ALTER DATABASE调整但一般情况下继承默认值就够用。3.4 修复后如何验证容器启动后重新执行第 2.1 节的那组命令。这次应该看到类似这样的输出变量名值character_set_clientutf8mb4character_set_connectionutf8mb4character_set_databaseutf8mb4character_set_filesystembinarycharacter_set_resultsutf8mb4character_set_serverutf8mb4character_set_systemutf8新建的库表 CHARSET 也都应该是 utf8mb4。到这一步服务端链路基本对齐新写入的数据不会再出现乱码问题。4. 历史数据乱码的两种修复路径第 3 节解决的是以后写入的问题。如果你是从老环境迁移过来的历史数据就算服务端配置全对了旧数据照样可能乱码。这一节放出两条成熟的修复路径按数据真实编码情况拆开讲。4.1 数据是 UTF-8 字节但被 latin1 错误读取这种情况在迁移项目里最普遍。数据物理层面是合法的 UTF-8 字节但由于 MySQL 服务器或者连接层用了 latin1 来解读读取时出现乱码。你在业务侧看到锟斤拷烫烫烫这类经典乱码但底层字节其实是好的。处理思路的通俗说法是先让 MySQL 按 latin1 把数据原样导出再按 utf8mb4 导入回去物理字节不改变只纠正声明。第一步导出旧库数据强制声明为 latin1mysqldump -uroot -p --default-character-setlatin1 \ --skip-set-charset \ --result-file/tmp/legacy_db.sql \ legacy_db--skip-set-charset的作用是让导出文件里不写入SET NAMES utf8mb4之类的语句避免导入时被文件头干扰。第二步把导出文件中的字符集声明改成 utf8mb4。老版本 MySQL 导出的 SQL 文件头部通常会有/*!40101 SET NAMES latin1 */;这样的语句把它替换成/*!40101 SET NAMES utf8mb4 */;同时检查文件里的CREATE TABLE语句把DEFAULT CHARSETlatin1和对应的COLLATE全部替换成 utf8mb4 体系。批量替换可以这样操作sed -i s/CHARSETlatin1/CHARSETutf8mb4/g /tmp/legacy_db.sql sed -i s/COLLATElatin1_swedish_ci/COLLATEutf8mb4_unicode_ci/g /tmp/legacy_db.sql替换前先grep一下确认数据本身不包含相关字样避免 sed 全文件替换误伤。第三步在新库中导入目标库的字符集预设为 utf8mb4mysql -uroot -p --default-character-setutf8mb4 \ -e CREATE DATABASE legacy_db_new CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; mysql -uroot -p --default-character-setutf8mb4 legacy_db_new /tmp/legacy_db.sql这套流程的本质是导出时让 MySQL 按 latin1 解码字节流导入时按 utf8mb4 编码写入完成了无损转码。几乎所有数据是好的只是声明错了的场景都能处理。4.2 数据真实编码是 GBK 或 GB2312如果是更老的中文环境数据可能是 GBK 编码直接写入的那么上面的按 latin1 导出再按 utf8mb4 导入就不成立了必须先做真正的编码转换。做法是先按 GBK 导出成文件再用iconv转码mysqldump -uroot -p --default-character-setgbk \ --skip-set-charset \ legacy_db /tmp/legacy_db_gbk.sql iconv -f GBK -t UTF-8 /tmp/legacy_db_gbk.sql /tmp/legacy_db_utf8.sql转码完成后仍然要处理文件里的CREATE TABLE字符集声明改成 utf8mb4再导入新库。这里有个非常容易踩的坑mysqldump 导出时如果表结构声明和实际数据编码不一致会出现各种诡异问题。比如表结构是 latin1、数据实际是 GBK按--default-character-setgbk导出时表结构里的字符集声明会被强制理解成 gbk导入时会跟目标库冲突。稳妥做法是先导出表结构--no-data转码处理好后再导出数据--no-create-info分两批导入。5.7 之后的 mysqldump 对这种兼容性处理得比较好但如果遇到问题就拆成两步走吧。4.3 为什么我不建议直接 ALTER TABLE CONVERT TO CHARACTER SET网上很多教程会给出这样的操作ALTER TABLE legacy_table CONVERT TO CHARACTER SET utf8mb4;这个语句确实能改掉表结构里的 charset 和列定义。但它有一个隐含前提MySQL 认为表里的数据是以原字符集比如 latin1存储的转换时会按原字符集解码再按新字符集编码。如果实际字节是 UTF-8而表定义是 latin1直接执行CONVERT TO会把 UTF-8 字节误当成 latin1 解码产生双重转换结果就是乱码套乱码。所以在使用这条命令前务必先确认字节的真实编码。HEX()等于E4BDA0E5A5BD的数据是 UTF-8 字节适合用 4.1 的导出导入方案HEX()等于C4E3BAC3的数据是 GBK 字节适合用 4.2 的转码方案。物理字节没确认清楚之前宁可用导出导入这种物理层搬运方式也不要贸然 ALTER。5. 连接层和应用层乱码问题最高发的地带过去我处理的项目里服务端配置问题大约占三成应用层连接问题占四成旧数据问题占三成。换句话说即使 Docker 镜像和服务端配置全部正确表也是 utf8mb4数据也没问题业务系统读出来照样可能乱码。问题往往出在这一节。5.1 JDBC 连接串的正确写法Java 技术栈里连接串必须显式指定useUnicodetrue和characterEncodingutf8。注意这里的utf8在 JDBC 驱动里映射的是 MySQL 的 utf8mb4兼容性没问题。推荐写法jdbc:mysql://localhost:3306/legacy_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai这是个高频错误点千万不要把characterEncoding写成utf8mb4。老版本驱动不认识这个值会直接报错或者静默回退到默认编码。我第一次踩这个坑时排查了半小时以为是 MySQL 配置没生效最后发现是连接串写错了。5.2 连接池和 ORM 层面的字符集传递使用 HikariCP、Druid 等连接池时要注意连接池在创建物理连接后会不会覆盖字符集设置。有些连接池提供了connectionInitSql配置项可以在连接建立后执行初始化 SQL。如果你对服务端的init_connect不放心这里可以再兜底一次。HikariCP 的配置示例spring: datasource: hikari: connection-init-sql: SET NAMES utf8mb4使用 MyBatis、Hibernate 时还要检查项目里有没有自定义的 TypeHandler 或拦截器在做手动编码转换。我遇到过旧项目里有人写了自定义过滤器每次请求都把字符串按 GBK 转一遍和现在全链路的 utf8mb4 设置重复叠加结果反而二次乱码。这类历史包袱排查起来最费时间建议先从代码里搜索GBK、gb2312、ISO-8859-1这些关键词。5.3 前端页面与接口返回的编码有一个经常被忽略的层面数据库、服务端、接口全是正常 utf8mb4返回的 JSON 也正确但前端页面显示乱码。这种情况多半是 HTTP 响应头没有声明charsetutf-8或者页面源码里的meta charset声明是旧的 GBK。排查方法很直接。打开浏览器开发者工具看响应头Content-Type是否包含charsetutf-8再看 HTML 源码里的meta charset声明。旧系统如果存在response.setCharacterEncoding(GBK)之类的硬编码必须同步改掉。别觉得这是小事。我遇到过一次最离谱的排查数据库、服务端、连接串、连接池全部排查完最后发现是前端一个不起眼的过滤器写了response.setCharacterEncoding(GBK)删掉就好了。前后折腾了两小时教训很深刻。5.4 连接层问题的快速验证法如果怀疑是连接层问题有一个一分钟就能验证的方法用命令行客户端模拟一个外部连接确认外部连接下字符集是否正常。docker exec -it mysql5.7-container mysql \ -uroot -p \ --default-character-setutf8mb4 \ -e SHOW VARIABLES LIKE character_set%;如果这里显示 utf8mb4你的业务代码读出来还是乱码那问题基本锁定在应用层如果这里显示 latin1说明连接层的配置还没生效回头看init_connect或连接池的初始化 SQL。6. 实战中遇到过的意外情况和踩坑记录这一节写的都是我实际遇到的问题每一个都对应一次真实的排障经历。6.1 官方镜像的配置文件顺序会覆盖自定义配置mysql:5.7镜像读取配置文件的顺序是/etc/my.cnf→/etc/mysql/my.cnf→/etc/mysql/conf.d/*.cnf→/etc/mysql/mysql.conf.d/*.cnf。官方镜像在/etc/mysql/conf.d/下会自带一个mysql.cnf它的内容可能包含!includedir /etc/mysql/mysql.conf.d/指令把别的配置目录也拉进来。有一次我偷懒直接在docker run命令里挂载/data/mysql-config:/etc/mysql/conf.d并且在宿主机里放了my.cnf。结果配置文件确实挂进去了但文件名排序在默认配置之后部分参数没生效。后来把文件名改成01-my.cnf靠排序优先级压住默认配置问题立刻消失。提示如果你在自定义配置文件里写了character-set-server utf8mb4但启动后SHOW VARIABLES还是 latin1先检查文件名排序。这是镜像配置加载顺序的坑不是文件内容的问题。6.2 docker exec 进入容器操作时的字符集陷阱有一种乱码特别迷惑人你在宿主机上用docker exec进入容器直接执行mysql命令行输入中文查询结果显示乱码。你以为服务端有问题其实只是容器里的 shell locale 不对。看echo $LANG如果是空或者 C/POSIX那么命令行客户端传给 MySQL 的字节就是按 ASCII 处理的中文必然乱。解决方式是进入容器时主动指定环境变量docker exec -it -e LANGC.UTF-8 mysql5.7-container mysql -uroot -p或者在容器启动时就预留好docker run -d ... -e LANGC.UTF-8 mysql:5.7这个问题看起来很小但在用docker exec排查问题时非常容易遇到。补充一句如果你在宿主机上安装了独立 mysql-client 去连接容器里的 3306 端口那宿主机终端本身的 locale 同样会影响中文输入输出也需要注意。6.3 全链路不一致导致的二次乱码循环迁移项目中遇到最麻烦的情况是第一批数据导入后很正常增量数据却持续乱码。最终定位原因是源库是 latin1 存储的 UTF-8 字节增量同步工具读取时用了错误的字符集声明把字节又做了一次转码。结果就是存量对、增量错两边不一致排查起来极其痛苦。这种情况光靠数据库端配置解决不了。凡是涉及自研同步脚本务必检查连接串和驱动参数如果用了现成同步工具检查任务配置里的编码声明保证同步链路的字符集和目标端完全一致。核心逻辑就是四个字全链路统一。任何一环声明错了都会导致从未设想到的二次乱码。6.4 排序规则选错导致的报错改字符集时如果排序规则没对应好会引发新问题。比如你把字符集改成了 utf8mb4但排序规则还停留在utf8_general_ci某些情况下执行建表语句直接报错ERROR 1273 (HY000): Unknown collation: utf8mb4_0900_ai_ci这个报错的根源是你在一个 MySQL 5.7 环境里导入了某个 8.0 环境生成的 SQL 文件里面带utf8mb4_0900_ai_ci排序规则5.7 不识别。解决方式是全局替换成 5.7 认识的规则sed -i s/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g /tmp/legacy_db.sql反过来如果你在 8.0 里导入 5.7 的 SQL一般不会报错但排序规则会被自动转换。旧环境部署时统一使用utf8mb4_unicode_ci是兼容性最好的选择。7. 一些实践层面的收尾建议很多人处理完乱码就跑了等到下次部署新环境又重蹈覆辙。我的建议是趁热打铁把字符集检查固化成一个可重复执行的验证流程。具体做法是在部署完成后跑一遍脚本检查服务端变量是否全为 utf8mb4抽查表结构的 CHARSET再插入一条包含中文和 emoji 的测试数据查出来对比是否原样返回。三步全绿才算部署真正完成。这个脚本用 Shell 和 SQL 就能写花不了多少时间但能省下后面无数个排查乱码的夜晚。再强调一点容器环境里的 MySQL 5.7 出现乱码不是单一故障而是一条链路上的系统性问题。镜像构建阶段、初始化建库阶段、历史数据迁移阶段、应用连接阶段、前端展示阶段每一环都要对齐到 utf8mb4。你多花三十分钟把链路理顺后面换环境、换人维护都会轻松很多。我在多次迁移项目里验证下来这是最省心的路径。

相关新闻

个人电脑安全体检:从系统配置到网络暴露面的全面评估指南

个人电脑安全体检:从系统配置到网络暴露面的全面评估指南

1. 为什么我们需要给个人电脑做“安全体检”干了这么多年系统维护和IT支持,我越来越觉得“安全状态检测与评估”这件事,像给车做年检一样。不是说你平时开着没毛病就不用管,也不是装了杀毒软件就万事大吉。个人电脑里的数据、账号、浏览记录、…

2026/10/13 4:26:05 阅读更多 →
DLT645-2007电表协议实战:报文解析与联调避坑指南

DLT645-2007电表协议实战:报文解析与联调避坑指南

简介:DL/T 645-2007《多功能电能表通信协议》最终版完整文档,由电力行业电测量标准化技术委员会归口发布,替代了1997年旧版,面向电能表研发、用电信息采集系统开发、计量运维及规约测试人员。文档系统规定了多功能电能表与数据采集…

2026/10/13 4:26:05 阅读更多 →
Linux内核链表实战:从自然数重排掌握list_head核心操作

Linux内核链表实战:从自然数重排掌握list_head核心操作

1. 从一道内核链表题说起:为什么值得认真拆解第一次看到“用链表存储若干自然数,把 1 2 3 4 5 6 7 8 9 重排成 1 3 5 7 9 8 6 4 2”这个题目时,很多人第一反应是“这不就是个数组排序题吗,开个数组分奇偶两半,奇数正着…

2026/10/13 4:26:05 阅读更多 →

最新新闻

反编译避坑指南:伪代码可信度判断与类型重建实战技巧

反编译避坑指南:伪代码可信度判断与类型重建实战技巧

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

2026/10/13 5:16:28 阅读更多 →
AI落地新浪潮:岗位重构与ds4本地推理实战指南

AI落地新浪潮:岗位重构与ds4本地推理实战指南

2026年10月4日那天的信息流,打开之后和往常不太一样。平时刷到的要么是模型榜单刷新,要么是某个框架发了新版,可这天前后三条全在讲"人的事"和"落地的事":先是某家AI公司的CEO公开说未来五年一半初级岗位会消…

2026/10/13 5:16:28 阅读更多 →
两变量关联性分析:从假设检验到相关系数选择与实操

两变量关联性分析:从假设检验到相关系数选择与实操

1. 两变量关联性分析到底在解决什么问题很多人做数据分析时,第一步会看分布、算均值,第二步就卡住了——手头有两个变量,想知道它们之间到底有没有关系,关系有多强,能不能用一个去预测另一个。这就是两变量关联性分析要…

2026/10/13 5:16:28 阅读更多 →
大模型训练全流程解析:从数据准备到部署排障的工程实践

大模型训练全流程解析:从数据准备到部署排障的工程实践

前阵子有个做AI应用的朋友跑来问我:网上把大模型训练说得神乎其神,到底一个模型是怎么炼成的?他刷过不少零碎教程,知道预训练、微调、RLHF这些词,但始终串不进一条完整链路。这个问题我回答过很多次,今天干…

2026/10/13 5:16:28 阅读更多 →
Robomaster硬件基础讲义:从电源树到CAN通信的工程实践

Robomaster硬件基础讲义:从电源树到CAN通信的工程实践

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

2026/10/13 5:16:28 阅读更多 →
密码破解原理与防御:从暴力枚举到多因素认证的完整指南

密码破解原理与防御:从暴力枚举到多因素认证的完整指南

做安全这一行,最常被朋友问的一句话就是:"你能不能帮我破解某个密码?"还有另一个版本:"网上那些破解密码的工具到底有没有用?"每次我都得先泼一盆冷水:真正搞安全的,研究破…

2026/10/13 5:15:27 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →