MySQL 节点常见问题#
以下是 MySQL 节点 的一些常见错误和问题以及解决或排除故障的步骤。
通过复合键更新行#
MySQL 节点的 Update 更新操作允许您通过提供Column to Match On 要匹配的列和值来更新表中的行。这适用于单列值可以唯一标识单个行的表。
您不能将此模式用于使用复合键的表,在这种情况下,您需要多列来唯一标识一行。一个例子是 MySQL 在 mysql
数据库中的 user
表,您需要 user
和 host
列来唯一标识行。
要更新具有复合键的表,请改用 Execute SQL 执行 SQL 操作手动编写查询。在那里,您可以匹配多个值,如这个匹配 customer_id
和 product_id
的示例:
1 |
|
使用 Docker 时无法连接到本地 MySQL 服务器#
当您在 Docker 中运行 n8n 或 MySQL 时,您需要配置网络,以便 n8n 可以连接到 MySQL。
解决方案取决于您如何托管这两个组件。
如果只有 MySQL 在 Docker 中#
如果只有 MySQL 在 Docker 中运行,请通过绑定到容器内的 0.0.0.0
来配置 MySQL 监听所有接口(官方镜像已经这样配置了)。
运行容器时,使用 -p
标志发布端口。默认情况下,MySQL 在端口 3306 上运行,因此您的 Docker 命令应该像这样:
1 |
|
配置 MySQL 凭据 时,localhost
地址应该可以正常工作(将Host 主机设置为 localhost
)。
如果只有 n8n 在 Docker 中#
如果只有 n8n 在 Docker 中运行,请通过绑定到主机上的 0.0.0.0
来配置 MySQL 监听所有接口。
如果您在 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 网络连接它们。
通过绑定到容器内的 0.0.0.0
来配置 MySQL 监听所有接口(官方镜像已经这样配置了)。将 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) 编辑字段(设置)节点 手动从字符串转换为小数。请注意,您可能仍需要考虑潜在的精度损失。