こんにちは、データベースを別のデータベースにエクスポートする際に問題が発生しました。 Mysql8.0とHeidi10.2.0の使用
「SQLエラー1347:xxxxはビューではありません」をエクスポートすると、ビューにエラーが発生します
それらはテーブルとして作成されています。
ビューは「ビュー」としてエクスポートされていません
画像1
画像2
画像3
問題はMySQL8にあり、 DROP VIEW xyz
動作が変更されています。 新しい動作については、 https : 。
ドキュメントにはDROP VIEW IF EXISTS xyz
を使用すると明確に記載されていますが、エラーではなくメモだけが返されます。 HeidiSQLは、左側のチェックボックスがオンになっているためにクエリを起動し(テーブルを削除)、 IF EXISTS
句を指定してクエリを起動します。これにより、エラーが回避されます。 明らかに、 xyz
がテーブルとして存在する場合でも、エラーが返されます。 それがMySQLのバグなのか、それとも意図的なものなのかはわかりません。 ただし、ドキュメントは不完全であり、回避策はわかりません。
この問題の根本はDROP VIEW IF EXISTS xyz
ではないと思いますが、HeidiSQLは、あるDBから別のDBに移動するときに、ビューをテーブルとして作成していると思います。
完全に空のDBでこれを実行しようとしましたが、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は、あるDBから別のDBに移動するときに、ビューをテーブルとして作成していると思います。完全に空のDBでこれを実行しようとしましたが、HeidiSQLがビューをテーブルとして作成したため、この問題が発生しました。