เอกสารประกอบสำหรับปัญหาและคำถามทั่วไปใน node MySQL ใน n8n ซึ่งเป็นแพลตฟอร์มอัตโนมัติของ workflow รวมถึงรายละเอียดของปัญหาและแนวทางแก้ไขที่แนะนำ
ต่อไปนี้เป็นข้อผิดพลาดและปัญหาทั่วไปบางประการเกี่ยวกับ MySQL และขั้นตอนในการแก้ไขหรือแก้ไขปัญหาเหล่านั้น
อัปเดตแถวด้วยคีย์ผสม
node MySQL Update การดำเนินการช่วยให้คุณสามารถอัปเดตแถวในตารางโดยระบุ Column to Match On และค่า วิธีนี้ใช้ได้กับตารางที่มีค่าคอลัมน์เดียวสามารถระบุแต่ละแถวได้โดยไม่ซ้ำกัน
คุณไม่สามารถใช้รูปแบบนี้สำหรับตารางที่ใช้ คีย์คอมโพสิต โดยที่คุณต้องการหลายคอลัมน์เพื่อระบุแถวโดยไม่ซ้ำกัน ตัวอย่างของสิ่งนี้คือของ MySQL user ตาราง ใน mysql ฐานข้อมูลที่คุณต้องการทั้ง user และ host คอลัมน์เพื่อระบุแถวโดยไม่ซ้ำกัน
หากต้องการอัปเดตตารางด้วยคีย์ผสม ให้เขียนแบบสอบถามด้วยตนเองด้วย Execute SQL ดำเนินการแทน ที่นั่น คุณสามารถจับคู่กับค่าหลายค่าได้ เช่นในตัวอย่างนี้ซึ่งตรงกับทั้งสองค่า customer_id และ product_id:
UPDATE orders SET quantity = 3 WHERE customer_id = 538 AND product_id = 800;
ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในเมื่อใช้ Docker
เมื่อคุณเรียกใช้ n8n หรือ MySQL ใน Docker คุณจะต้องกำหนดค่าเครือข่ายเพื่อให้ n8n สามารถเชื่อมต่อกับ MySQL ได้
วิธีแก้ปัญหาขึ้นอยู่กับว่าคุณโฮสต์ทั้งสองคอมโพเนนต์อย่างไร
หากมีเพียง MySQL เท่านั้นที่อยู่ใน Docker (If only MySQL is in Docker)
หากมีเฉพาะ MySQL ที่ทำงานอยู่ใน Docker ให้กำหนดค่า MySQL ให้ฟังบนอินเทอร์เฟซทั้งหมดโดยการผูกเข้ากับ 0.0.0.0 ภายในคอนเทนเนอร์ (รูปภาพอย่างเป็นทางการได้รับการกำหนดค่าด้วยวิธีนี้แล้ว)
เมื่อเรียกใช้คอนเทนเนอร์ เผยแพร่พอร์ต กับ -p ธง ตามค่าเริ่มต้น MySQL ทำงานบนพอร์ต 3306 ดังนั้นคำสั่ง Docker ของคุณควรมีลักษณะดังนี้:
docker run -p 3306:3306 --name my-mysql -d mysql:latest
เมื่อทำการกำหนดค่า MySQL credentials , ที่ localhost ที่อยู่ควรจะทำงานได้โดยไม่มีปัญหา (ตั้งค่า Host ถึง localhost).
หากมีเพียง n8n เท่านั้นที่อยู่ใน Docker (If only n8n is in Docker)
หากมีเฉพาะ n8n ที่ทำงานอยู่ใน Docker ให้กำหนดค่า MySQL ให้ฟังบนอินเทอร์เฟซทั้งหมดโดยการผูกเข้ากับ 0.0.0.0 บนโฮสต์
หากคุณใช้ n8n ใน Docker Linux ให้ใช้ --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 n8nio/n8n
หากคุณใช้ Docker Desktop ระบบจะกำหนดค่านี้ให้คุณโดยอัตโนมัติ
เมื่อทำการกำหนดค่า MySQL credentials ใช้ host.docker.internal เป็น Host ที่อยู่แทน localhost.
หาก MySQL และ n8n ทำงานในคอนเทนเนอร์ Docker แยกกัน (If MySQL and n8n are running in separate Docker containers)
หากทั้ง n8n และ MySQL ทำงานใน Docker ในคอนเทนเนอร์ที่แยกจากกัน คุณสามารถใช้เครือข่าย Docker เพื่อเชื่อมต่อได้
กำหนดค่า MySQL เพื่อฟังบนอินเทอร์เฟซทั้งหมดโดยเชื่อมโยงกับ 0.0.0.0 ภายในคอนเทนเนอร์ (รูปภาพอย่างเป็นทางการได้รับการกำหนดค่าด้วยวิธีนี้แล้ว) เพิ่มทั้งคอนเทนเนอร์ MySQL และ n8n ให้เหมือนกัน เครือข่ายบริดจ์ที่ผู้ใช้กำหนด .
เมื่อทำการกำหนดค่า MySQL credentials ให้ใช้ชื่อของคอนเทนเนอร์ MySQL เป็นที่อยู่โฮสต์แทน localhost . ตัวอย่างเช่น หากคุณเรียกใช้คอนเทนเนอร์ MySQL my-mysql คุณจะตั้งค่า Host ถึง my-mysql.
หาก MySQL และ n8n ทำงานในคอนเทนเนอร์ Docker เดียวกัน (If MySQL and n8n are running in the same Docker container)
หาก MySQL และ n8n ทำงานในคอนเทนเนอร์ Docker เดียวกัน localhost ที่อยู่ไม่จำเป็นต้องมีการกำหนดค่าพิเศษใดๆ คุณสามารถกำหนดค่า MySQL เพื่อฟังได้ localhost และกำหนดค่า Host ใน Ollama credentials ที่จะใช้ localhost.
ตัวเลขทศนิยมที่ส่งคืนเป็น string
ตามค่าเริ่มต้น node MySQL จะส่งกลับ DECIMAL ค่านิยม เป็น string นี่เป็นการกระทำโดยเจตนาเพื่อหลีกเลี่ยงการสูญเสียความแม่นยำที่อาจเกิดขึ้นเนื่องจากข้อจำกัดของวิธีที่ JavaScript แทนตัวเลข คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการตัดสินใจได้ในเอกสารประกอบของ ไลบรารี MySQL ที่ n8n ใช้
หากต้องการส่งออกค่าทศนิยมเป็นตัวเลขแทน string และละเว้นความเสี่ยงในการสูญเสียความแม่นยำ ให้เปิดใช้งาน ทศนิยมเอาท์พุทเป็นตัวเลข (Output Decimals as Numbers) ตัวเลือก สิ่งนี้จะส่งออกค่าเป็นตัวเลขแทนที่จะเป็น string
อีกทางเลือกหนึ่ง คุณสามารถแปลงจาก string เป็นทศนิยมได้ด้วยตนเองโดยใช้ toFloat() ฟังก์ชั่นด้วย toFixed() หรือกับ Edit Fields (Set) หลังจาก node MySQL โปรดทราบว่าคุณยังอาจจำเป็นต้องคำนึงถึงการสูญเสียความแม่นยำที่อาจเกิดขึ้น

