MySQL node common issues#
นี่คือข้อผิดพลาดและปัญหาทั่วไปที่พบในโหนด MySQL และขั้นตอนในการแก้ไขหรือตรวจสอบปัญหา
Update rows by composite key#
การดำเนินการ Update ของโหนด MySQL ช่วยให้คุณอัปเดตแถวในตารางโดยระบุ Column to Match On และค่า การทำงานแบบนี้เหมาะกับตารางที่สามารถระบุแถวได้อย่างเฉพาะเจาะจงด้วยค่าคอลัมน์เดียว
คุณไม่สามารถใช้รูปแบบนี้กับตารางที่ใช้ composite keys ซึ่งคุณจำเป็นต้องใช้หลายคอลัมน์เพื่อระบุแถวอย่างเฉพาะเจาะจง ตัวอย่างเช่น ตาราง user
ใน MySQL ในฐานข้อมูล mysql
ซึ่งคุณต้องใช้ทั้งคอลัมน์ user
และ host
เพื่อระบุแถวอย่างเฉพาะเจาะจง
ในการอัปเดตตารางที่มี composite keys ให้เขียนคำสั่ง query ด้วยตนเองโดยใช้การดำเนินการ Execute SQL แทน คุณสามารถจับคู่กับค่าหลายค่า เช่น ในตัวอย่างนี้ที่ทำการจับคู่ทั้ง customer_id
และ product_id
:
1 |
|
Can't connect to a local MySQL server when using Docker#
เมื่อคุณรัน n8n หรือ MySQL ใน Docker คุณจำเป็นต้องกำหนดค่าเครือข่ายเพื่อให้ n8n สามารถเชื่อมต่อกับ MySQL ได้
วิธีแก้ไขขึ้นอยู่กับวิธีการโฮสต์คอมโพเนนต์ทั้งสอง
If only MySQL is in Docker#
หากมีเพียง MySQL ที่รันใน Docker ให้กำหนดค่า MySQL ให้รับฟังทุก interface โดยการ binding กับ 0.0.0.0
ภายในคอนเทนเนอร์ (อิมเมจทางการได้รับการกำหนดค่าในลักษณะนี้แล้ว)
เมื่อรันคอนเทนเนอร์ ให้ เผยแพร่พอร์ต ด้วยแฟล็ก -p
โดยค่าเริ่มต้น MySQL รันบนพอร์ต 3306 ดังนั้นคำสั่ง Docker ของคุณควรมีลักษณะดังนี้:
1 |
|
เมื่อกำหนดค่า MySQL credentials แอดเดรส localhost
ควรทำงานได้โดยไม่มีปัญหา (ตั้งค่า Host เป็น localhost
)
If only n8n is in Docker#
หากมีเพียง n8n ที่รันใน Docker ให้กำหนดค่า MySQL ให้รับฟังทุก interface โดยการ binding กับ 0.0.0.0
บนโฮสต์
ถ้าคุณกำลังรัน n8n ใน Docker บน Linux ให้ใช้แฟล็ก --add-host
เพื่อ map host.docker.internal
ไปยัง host-gateway
เมื่อคุณเริ่มต้นคอนเทนเนอร์ ตัวอย่างเช่น:
1 |
|
ถ้าคุณใช้ Docker Desktop การตั้งค่านี้จะถูกกำหนดค่าโดยอัตโนมัติ
เมื่อกำหนดค่า MySQL credentials ให้ใช้ host.docker.internal
เป็นแอดเดรส Host แทน localhost
If MySQL and n8n are running in separate Docker containers#
หากทั้ง n8n และ MySQL รันใน Docker ในคอนเทนเนอร์แยกกัน คุณสามารถใช้เครือข่าย Docker เพื่อเชื่อมต่อพวกมัน
กำหนดค่า MySQL ให้รับฟังทุก interface โดยการ binding กับ 0.0.0.0
ภายในคอนเทนเนอร์ (อิมเมจทางการได้รับการกำหนดค่าในลักษณะนี้แล้ว) เพิ่มทั้งคอนเทนเนอร์ MySQL และ n8n ใน เครือข่าย bridge ที่ผู้ใช้กำหนดเอง
เมื่อกำหนดค่า MySQL credentials ให้ใช้ชื่อคอนเทนเนอร์ MySQL เป็นแอดเดรส host แทน localhost
ตัวอย่างเช่น ถ้าคุณเรียกคอนเทนเนอร์ MySQL ว่า my-mysql
คุณจะตั้งค่า Host เป็น my-mysql
If MySQL and n8n are running in the same Docker container#
หาก MySQL และ n8n รันในคอนเทนเนอร์ Docker เดียวกัน แอดเดรส localhost
ไม่จำเป็นต้องมีการกำหนดค่าพิเศษ คุณสามารถกำหนดค่า MySQL ให้รับฟังที่ localhost
และกำหนดค่า Host ใน MySQL credentials ใน n8n ให้ใช้ localhost
Decimal numbers returned as strings#
โดยค่าเริ่มต้น โหนด MySQL จะส่งคืนค่า DECIMAL
เป็นสตริง นี่เป็นการทำโดยเจตนาเพื่อหลีกเลี่ยงการสูญเสียความแม่นยำที่อาจเกิดขึ้นเนื่องจากข้อจำกัดของวิธีที่ JavaScript แสดงตัวเลข คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการตัดสินใจนี้ในเอกสารสำหรับ ไลบรารี MySQL ที่ n8n ใช้
เพื่อแสดงค่าทศนิยมเป็นตัวเลขแทนสตริงและเพิกเฉยต่อความเสี่ยงในการสูญเสียความแม่นยำ ให้เปิดใช้งานตัวเลือก Output Decimals as Numbers ซึ่งจะแสดงค่าเป็นตัวเลขแทนสตริง
อีกทางเลือกหนึ่ง คุณสามารถแปลงค่าจากสตริงเป็นทศนิยมด้วยตนเองโดยใช้ ฟังก์ชั่น toFloat()
กับ toFixed()
หรือด้วย โหนด Edit Fields (Set) หลังจากโหนด MySQL โปรดทราบว่าคุณอาจยังคงต้องระวังเรื่องการสูญเสียความแม่นยำที่อาจเกิดขึ้น