MySQL节点常见问题#
以下是MySQL节点常见错误和问题及其解决方法或排查步骤。
通过复合键更新行#
MySQL节点的更新操作允许您通过提供匹配列和对应值来更新表中的行。这适用于单列值能唯一标识各行的表。
此模式不适用于使用复合键的表,这类表需要多列才能唯一标识一行。例如MySQL的mysql数据库中的user表,需要同时使用user和host列才能唯一标识行。
要更新具有复合键的表,请改用执行SQL操作手动编写查询。在那里,您可以匹配多个值,就像这个同时匹配customer_id和product_id的示例:
1 | |
使用Docker时无法连接到本地MySQL服务器#
当您在Docker中运行n8n或MySQL时,需要配置网络以使n8n能够连接到MySQL。
解决方案取决于您如何托管这两个组件。
如果只有MySQL在Docker中#
如果仅在Docker中运行MySQL,请通过绑定容器内的0.0.0.0来配置MySQL监听所有接口(官方镜像已采用此配置方式)。
运行容器时,使用-p标志发布端口。默认情况下,MySQL运行在3306端口,因此您的Docker命令应如下所示:
1 | |
配置MySQL凭证时,localhost地址通常可以直接使用(将主机设置为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作为主机地址,而非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库文档中了解更多关于该决策的信息。
要将十进制值以数字而非字符串形式输出,并忽略精度损失的风险,请启用将十进制数以数字形式输出选项。这将使数值以数字而非字符串形式输出。
作为替代方案,您可以使用toFloat()函数配合toFixed(),或者在MySQL节点后使用编辑字段(设置)节点来手动将字符串转换为十进制数。请注意,您可能仍需考虑潜在的精度损失问题。