MySQL节点常见问题#
以下是使用MySQL节点时可能遇到的一些常见错误和问题,以及相应的解决或排查步骤。
通过复合键更新行#
MySQL节点的更新操作允许通过指定匹配列及其对应值来更新表中的行。此方法适用于单列值即可唯一标识数据行的表。
对于采用复合键的表(需要多列组合才能唯一标识数据行),则无法使用此模式。例如mysql数据库中的MySQLuser表,必须同时使用user和host两列才能唯一标识数据行。
如需更新含复合键的表,请改用执行SQL操作手动编写查询语句。通过该操作可实现多值匹配,如下例同时匹配customer_id和product_id的情况:
UPDATE orders SET quantity = 3 WHERE customer_id = 538 AND product_id = 800;
无法在使用Docker时连接本地MySQL服务器#
当您在Docker中运行n8n或MySQL时,需要配置网络以使n8n能够连接到MySQL。
解决方案取决于两个组件的部署方式。
仅MySQL运行于Docker 的情况#
若仅MySQL在Docker中运行,需通过绑定容器内的0.0.0.0地址将MySQL配置为监听所有接口(官方镜像已按此方式配置)。
运行容器时,请使用-p参数发布端口。默认情况下MySQL运行在3306端口,因此Docker命令应如下所示:
docker run -p 3306:3306 --name my-mysql -d mysql:latest
配置 MySQL 凭据 时,localhost 地址应可正常使用(将主机设置为 localhost)。
若仅 n8n 运行于 Docker 中#
若仅 n8n 在 Docker 中运行,需通过将主机绑定至 0.0.0.0 来配置 MySQL 监听所有接口。
若您在 Linux 系统的 Docker 中运行 n8n,启动容器时请使用 --add-host 标志将 host.docker.internal 映射至 host-gateway。例如:
docker run -it --rm --add-host host.docker.internal:host-gateway --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
若您正在使用 Docker Desktop,系统已自动为您完 成配置。
在配置 MySQL 凭据 时,请使用 host.docker.internal 作为主机地址,而非 localhost。
MySQL 与 n8n 分别运行于独立 Docker 容器的情况#
当 n8n 与 MySQL 分别运行于独立的 Docker 容器时,可通过 Docker 网络实现互联。
将 MySQL 配置为监听容器内所有接口(绑定至 0.0.0.0,官方镜像已默认按此配置)。将 MySQL 与 n8n 容器加入同一用户自定义桥接网络。
配置 MySQL 凭据 时,请使用 MySQL 容器名称作为主机地址(替代 localhost)。例如若将 MySQL 容器命名为 my-mysql,则需将主机字段设置为 my-mysql。
MySQL 与 n8n 运行于同一 Docker 容器的情况#
当 MySQL 与 n8n 运行于同一 Docker 容器时,localhost 地址无需特殊配置。您可将 MySQL 配置为监听 localhost,并在 n8n 的 MySQL 凭据 中将主机字段设置为 localhost。
十进制数值以字符串形式返回的问题#
默认情况下,MySQL 节点会将 DECIMAL 类型数值 以字符串形式返回。此设计旨在避免因 JavaScript 数值表示方式的限制导致精度损失。您可通过 n8n 使用的 MySQL 库文档 了解该决策的详细背景。
若需以数值形式输出十进制值(忽略精度损失风险),可启用将十进制作为数值输出选项。此设置将把对应值以数值而非字符串形式输出。
作为替代方案,您可在 MySQL 节点后使用 toFloat() 函数 配合 toFixed(),或通过 编辑字段(设置)节 点 手动将字符串转换为小数。请注意仍需注意潜在的精度损失问题。