Heidisql: MySQL8.0-ビューのエクスポートの問題

作成日 2019年09月23日  ·  3コメント  ·  ソース: HeidiSQL/HeidiSQL

この問題を再現する手順

こんにちは、データベースを別のデータベースにエクスポートする際に問題が発生しました。 Mysql8.0とHeidi10.2.0の使用

  1. エクスポートするデータベースを選択します:「dababaseをSQLとしてエクスポート」
  2. テーブルの選択:ドロップして作成
  3. データの選択:削除+挿入(既存のデータを切り捨てる)
  4. 出力の選択:Dabase
  5. [エクスポート]をクリックします
  6. ビューでエラー「SQLエラー1347:xxxxはビューではありません」が表示されます

現在の動作


「SQLエラー1347:xxxxはビューではありません」をエクスポートすると、ビューにエラーが発生します
それらはテーブルとして作成されています。

予想される行動


ビューは「ビュー」としてエクスポートされていません

考えられる解決策

環境

  • HeidiSQLバージョン: 10.2.0.5695
  • データベースシステムとバージョン: Mysqlバージョン:8.0.17-データベース照合:utf8mb4_0900_ai_ci
  • オペレーティングシステム: Windows 10

画像1
Screenshot_2
画像2
Screenshot_3
画像3
Screenshot_4

bug confirmed nettype-mysql

最も参考になるコメント

この問題の根本はDROP VIEW IF EXISTS xyzではないと思いますが、HeidiSQLは、あるDBから別のDBに移動するときに、ビューをテーブルとして作成していると思います。

完全に空のDBでこれを実行しようとしましたが、HeidiSQLがビューをテーブルとして作成したため、この問題が発生しました。

全てのコメント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> */;
このページは役に立ちましたか?
0 / 5 - 0 評価