پرش به محتویات

مشکلات معمولی نود MySQL#

در اینجا برخی خطاها و مشکلات رایج در ارتباط با نود MySQL و مراحل حل یا عیب‌یابی آنها آورده شده است.

بروزرسانی ردیف‌ها با کلید مرکب#

عملیات بروزرسانی نود MySQL به شما اجازه می‌دهد تا ردیف‌ها را در یک جدول با ارائه یک ستون برای تطابق و یک مقدار بروزرسانی کنید. این روش در جدول‌هایی کار می‌کند که مقادیر یک ستون منفرد بتواند به صورت یکتا ردیف‌ها را شناسایی کند.

شما نمی‌توانید از این الگو برای جدول‌هایی که از کلیدهای مرکب استفاده می‌کنند، استفاده کنید، جایی که نیاز به چندین ستون برای شناسایی یکتا ردیف دارید. نمونه‌ای از این جدول‌ها، جدول user در پایگاه داده mysql است، که در آن باید هم ستون‌های user و host برای شناسایی یکتا ردیف‌ها مشخص شوند.

برای بروزرسانی جدول‌هایی با کلیدهای مرکب، به صورت دستی کوئری بنویسید و از عملیات اجرای SQL استفاده کنید. در اینجا می‌توانید بر روی چندین مقدار تطابق دهید، مانند نمونه‌ای که در زیر آمده است و بر روی هر دو customer_id و product_id تطابق دارد:

```sql UPDATE orders SET quantity = 3 WHERE customer_id = 538 AND product_id = 800;

نمی‌توانم به سرور MySQL محلی متصل شوم هنگام استفاده از Docker#

وقتی شما نِچن یا MySQL را در Docker اجرا می‌کنید، باید شبکه را پیکربندی کنید تا نِچن بتواند به MySQL متصل شود.

راه‌حل بستگی به چگونگی میزبانی این دو مؤلفه دارد.

اگر فقط MySQL در Docker است#

اگر فقط MySQL در Docker اجرا می‌شود، باید MySQL را طوری پیکربندی کنید که روی تمامی رابط‌ها گوش دهد، با کانکشن به 0.0.0.0 در داخل کانتینر (تصاویر رسمی قبلاً این تنظیم را دارند).

وقتی کانتینر را اجرا می‌کنید، پورت را منتشر کنید با پرچم -p. به طور پیش‌فرض، MySQL روی پورت ۳۳۰۶ اجرا می‌شود، بنابراین دستور Docker شما باید شبیه به این باشد:

```shell docker run -p 3306:3306 --name my-mysql -d mysql:latest

هنگام پیکربندی اطلاعات ورودی MySQL، آدرس localhost بدون مشکل کار می‌کند (درجه Host را روی localhost قرار دهید).

اگر فقط n98n در Docker است#

اگر فقط n98n در Docker اجرا می‌شود، MySQL را طوری پیکربندی کنید که روی تمامی رابط‌ها گوش دهد و به 0.0.0.0 روی میزبان کانکشن دهد.

اگر در لینوکس در حال اجرای n98n در Docker هستید، از پرچم --add-host برای نقشه‌برداری host.docker.internal به host-gateway هنگام راه‌اندازی کانتینر استفاده کنید. برای مثال:

```shell docker run -it --rm --add-host host.docker.internal:host-gateway --name n98n -p 5678:5678 -v n8n_data:/home/node/.n98n docker.n98n.ir/n8nio/n8n

اگر از Docker Desktop استفاده می‌کنید، این به صورت خودکار پیکربندی شده است.

هنگام پیکربندی اطلاعات ورودی MySQL، از host.docker.internal به عنوان مقدار Host استفاده کنید به جای localhost.

اگر MySQL و n98n در کانتینرهای Docker جداگانه اجرا می‌شوند#

اگر هر دوی n98n و MySQL در کانتینرهای جداگانه اجرا می‌شوند، می‌توانید از شبکه‌سازی Docker برای کانکشن آنها استفاده کنید.

MySQL را طوری پیکربندی کنید که روی تمامی رابط‌ها گوش دهد و به 0.0.0.0 در داخل کانتینر وصل باشد (تصاویر رسمی قبلاً این کار را انجام داده‌اند). هر دو کانتینر MySQL و n98n را به همان شبکه bridge تعریف‌شده توسط کاربر اضافه کنید.

در هنگام پیکربندی اطلاعات ورودی MySQL، از نام کانتینر MySQL به عنوان آدرس میزبان استفاده کنید به جای localhost. مثلاً اگر نام کانتینر MySQL شما my-mysql است، مقدار Host را روی my-mysql قرار دهید.

اگر MySQL و n98n در یک کانتینر Docker هستند#

اگر MySQL و n98n در همان کانتینر Docker اجرا می‌شوند، آدرس localhost نیازی به پیکربندی خاص ندارد. می‌توانید MySQL را روی localhost تنظیم کنید و در تنظیمات Host در اطلاعات ورودی MySQL در n8n از localhost استفاده کنید.

اعداد اعشاری به‌عنوان رشته برگردانده می‌شوند#

به طور پیش‌فرض، نود MySQL مقادیر DECIMAL را به عنوان رشته برمی‌گرداند. این کار عمدی است تا از از دست رفتن دقت جلوگیری شود، که ممکن است به دلیل محدودیت در نحوه نمایش اعداد در JavaScript رخ دهد. می‌توانید جزئیات بیشتر را در مستندات کتابخانه MySQL که n98n از آن استفاده می‌کند، بیاموزید.

برای خروجی گرفتن اعداد اعشاری به‌صورت عدد و نادیده گرفتن خطر از دست رفتن دقت، گزینه خروجی گرفتن اعشارها به‌صورت عدد را فعال کنید. این تنظیم مقادیر را به جای رشته به صورت عدد خروجی می‌دهد.

همچنین، می‌توانید به صورت دستی مقدار را از رشته به عدد اعشاری تبدیل کنید، با استفاده از toFloat() و toFixed() یا پس از نود MySQL، با نود ویرایش فیلدها (مقداردهی). آگاه باشید که ممکن است هنوز نیاز باشد از احتمال از دست رفتن دقت آگاه باشید.