MySQL 节点常见问题#
以下是 MySQL 节点的一些常见错误和问题,以及解决方法或排查步骤。
通过复合键更新行#
MySQL 节点的更新操作允许您通过提供匹配列和值来更新表中的行。这适用于可以通过单列值唯一标识行的表。
对于使用复合键的表(需要多列才能唯一标识行),您不能使用此模式。例如 MySQL 的 mysql
数据库中的 user
表,需要同时使用 user
和 host
列才能唯一标识行。
要更新具有复合键的表,请改用执行 SQL 操作手动编写查询。在那里,您可以匹配多个值,如下例同时匹配 customer_id
和 product_id
:
1 |
|
使用 Docker 时无法连接到本地 MySQL 服务器#
当您在 Docker 中运行 n8n 或 MySQL 时,需要配置网络以使 n8n 能够连接到 MySQL。
解决方案取决于您如何托管这两个组件。
仅 MySQL 运行在 Docker 中#
如果只有 MySQL 运行在 Docker 容器内,需要配置 MySQL 监听所有网络接口(绑定到容器内的 0.0.0.0
,官方镜像已默认采用此配置)。
运行容器时,使用 -p
参数发布端口。MySQL 默认使用 3306 端口,因此 Docker 命令应如下所示:
1 |
|
配置 MySQL 凭据时,localhost
地址可直接使用(将 Host 设置为 localhost
)。
仅 n8n 运行在 Docker 中#
如果只有 n8n 运行在 Docker 容器内,需要配置主机上的 MySQL 监听所有网络接口(绑定到 0.0.0.0
)。
在 Linux 上运行 Docker 版 n8n 时,启动容器需使用 --add-host
参数将 host.docker.internal
映射到 host-gateway
。例如:
1 |
|
如果使用 Docker Desktop,此配置会自动完成。
配置 MySQL 凭据时,请使用 host.docker.internal
作为 Host 地址而非 localhost
。
当 MySQL 和 n8n 运行在独立的 Docker 容器中#
如果 n8n 和 MySQL 分别运行在不同的 Docker 容器中,可以通过 Docker 网络连接它们。
配置 MySQL 容器监听所有接口(绑定到 0.0.0.0
,官方镜像已默认采用此配置)。将 MySQL 和 n8n 容器加入同一个用户自定义桥接网络。
在配置 MySQL 凭据时,使用 MySQL 容器名称作为主机地址而非 localhost
。例如,若将 MySQL 容器命名为 my-mysql
,则应将 Host 设置为 my-mysql
。
当 MySQL 和 n8n 运行在同一个 Docker 容器中#
如果 MySQL 和 n8n 运行在同一个 Docker 容器内,localhost
地址无需特殊配置。可以配置 MySQL 监听 localhost
,并在 n8n 的 MySQL 凭据配置中将 Host 设为 localhost
。
十进制数以字符串形式返回#
默认情况下,MySQL 节点会将 DECIMAL
类型值作为字符串返回。这是有意为之的设计,目的是避免由于 JavaScript 数字表示方式的限制而可能导致精度损失。您可以在 n8n 使用的 MySQL 库文档中了解更多关于此决策的背景信息。
若要以数字形式输出十进制值(忽略可能的精度损失风险),请启用 Output Decimals as Numbers(将十进制数输出为数字)选项。这将使返回值以数字形式而非字符串形式输出。
作为替代方案,您可以在 MySQL 节点之后使用 toFloat()
函数配合 toFixed()
,或使用 Edit Fields (Set) 节点手动将字符串转换为十进制数。但请注意,您可能仍需处理潜在的精度损失问题。