مرحبًا ، هناك مشكلة في تصدير قاعدة بيانات إلى أخرى. باستخدام Mysql 8.0 و Heidi 10.2.0
تحصل طرق العرض على خطأ عند تصدير "خطأ SQL 1347: xxxx ليس عرضًا"
لقد تم إنشاؤها كجداول.
لم يتم تصدير طرق العرض كـ "طرق عرض"
الصورة 1
الصورة 2
صورة 3
المشكلة في MySQL 8 ، السلوك المتغير لـ DROP VIEW xyz
. تم وصف السلوك الجديد هنا: https://dev.mysql.com/doc/refman/8.0/en/drop-view.html
على الرغم من أن المستندات توضح بوضوح عند استخدام DROP VIEW IF EXISTS xyz
، فإن الملاحظة فقط ترجع ، وليس خطأ. تقوم HeidiSQL بتشغيل الاستعلام بسبب مربع الاختيار الأيسر المحدد (إسقاط الجداول) ، وتنشيطه باستخدام عبارة IF EXISTS
، والتي يجب أن تتجنب الخطأ. من الواضح أنه لا يزال يتم إرجاعه مع وجود خطأ إذا كان xyz
موجودًا كجدول. لست متأكدًا مما إذا كان هذا خطأ في MySQL أو إذا كان ذلك عن قصد. ومع ذلك ، فإن المستندات غير مكتملة ، وليس لدي أي فكرة عن حل بديل.
أعتقد أن جذر هذه المشكلة ليس DROP VIEW IF EXISTS xyz
، لكن HeidiSQL يقوم بإنشاء طرق العرض كجداول عند نقل الأشياء من قاعدة بيانات إلى أخرى.
حاولت القيام بذلك على قاعدة بيانات فارغة تمامًا وأنشأت HeidiSQL وجهات النظر كجداول والتي تسببت بدورها في حدوث هذه المشكلة.
الحل المحتمل هو أن تفعل الشيء نفسه الذي تفعله mysqldump لحل هذا:
--
-- Temporary view structure for view `xyz`
--
DROP TABLE IF EXISTS `xyz`;
/*!50001 DROP VIEW IF EXISTS `xyz`*/;
SET <strong i="6">@saved_cs_client</strong> = @@character_set_client;
/*!50503 SET character_set_client = utf8mb4 */;
/*!50001 CREATE VIEW `xyz` AS SELECT
1 AS `x`,
1 AS `y`,
1 AS `z`*/;
SET character_set_client = @saved_cs_client;
-- Rest of the dump...
--
-- Final view structure for view `xyz`
--
/*!50001 DROP VIEW IF EXISTS `xyz`*/;
/*!50001 SET <strong i="7">@saved_cs_client</strong> = @<strong i="8">@character_set_client</strong> */;
/*!50001 SET <strong i="9">@saved_cs_results</strong> = @<strong i="10">@character_set_results</strong> */;
/*!50001 SET <strong i="11">@saved_col_connection</strong> = @<strong i="12">@collation_connection</strong> */;
/*!50001 SET character_set_client = utf8 */;
/*!50001 SET character_set_results = utf8 */;
/*!50001 SET collation_connection = utf8_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`john.doe`@`%` SQL SECURITY DEFINER */
/*!50001 VIEW `xyz` AS SELECT x, y, z FROM tbl */;
/*!50001 SET character_set_client = <strong i="13">@saved_cs_client</strong> */;
/*!50001 SET character_set_results = <strong i="14">@saved_cs_results</strong> */;
/*!50001 SET collation_connection = <strong i="15">@saved_col_connection</strong> */;
التعليق الأكثر فائدة
أعتقد أن جذر هذه المشكلة ليس
DROP VIEW IF EXISTS xyz
، لكن HeidiSQL يقوم بإنشاء طرق العرض كجداول عند نقل الأشياء من قاعدة بيانات إلى أخرى.حاولت القيام بذلك على قاعدة بيانات فارغة تمامًا وأنشأت HeidiSQL وجهات النظر كجداول والتي تسببت بدورها في حدوث هذه المشكلة.