跳转至

MySQL 节点常见问题#

以下是 MySQL 节点 的一些常见错误和问题,以及解决或排除它们的步骤。

通过复合键更新行#

MySQL 节点的更新操作允许您通过提供匹配的列和值来更新表中的行。这适用于单列值可以唯一标识各个行的表。

您不能将此模式用于使用复合键的表,在这种情况下,您需要多个列来唯一标识一行。一个例子是 mysql 数据库中 MySQL 的 user,您需要 userhost 列来唯一标识行。

要更新具有复合键的表,请使用执行 SQL操作手动编写查询。在那里,您可以匹配多个值,就像这个同时匹配 customer_idproduct_id 的示例:

1
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 命令应该如下所示:

1
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。例如:

1
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 网络来连接它们。

通过在容器内部绑定到 0.0.0.0 来配置 MySQL 侦听所有接口(官方镜像已经这样配置了)。将 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 库的文档中了解更多关于这一决定的信息。

要将小数值作为数字而不是字符串输出并忽略精度损失的风险,请启用将小数输出为数字选项。这将将值作为数字而不是字符串输出。

作为替代方案,您可以使用 toFloat() 函数toFixed() 或在 MySQL 节点之后使用编辑字段(Set)节点手动从字符串转换为小数。请注意,您仍然可能需要考虑潜在的精度损失。

此页面是否
💬 微信

🚀 与作者交流

关注公众号
n8n实战笔记公众号
n8n实战笔记
📚 教程 💡 案例 🔧 技巧
添加微信
添加作者微信
1对1 专业指导
⚡ 快答 🎯 定制 🚀 支持