跳到主要内容

MySQL节点常见问题#

以下是使用MySQL节点时可能遇到的一些常见错误和问题,以及相应的解决或排查步骤。

通过复合键更新行#

MySQL节点的更新操作允许通过指定匹配列及其对应值来更新表中的行。此方法适用于单列值即可唯一标识数据行的表。

对于采用复合键的表(需要多列组合才能唯一标识数据行),则无法使用此模式。例如mysql数据库中的MySQLuser,必须同时使用userhost两列才能唯一标识数据行。

如需更新含复合键的表,请改用执行SQL操作手动编写查询语句。通过该操作可实现多值匹配,如下例同时匹配customer_idproduct_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(),或通过 编辑字段(设置)节点 手动将字符串转换为小数。请注意仍需注意潜在的精度损失问题。