Heidisql: MySQL 8.0 - Problème d'export des vues

Créé le 23 sept. 2019  ·  3Commentaires  ·  Source: HeidiSQL/HeidiSQL

Étapes pour reproduire ce problème

Bonjour, il y a un problème lors de l'exportation d'une base de données vers une autre. Utilisation de Mysql 8.0 et Heidi 10.2.0

  1. Sélectionnez la base de données à exporter : "Exporter la base de données en tant que SQL"
  2. Sélectionner une table : supprimer et créer
  3. Sélectionner les données : Supprimer + insérer (tronquer les données existantes)
  4. Sélectionnez la sortie : Dabase
  5. Cliquez sur Exporter
  6. Sur la vue, j'obtiens l'erreur "Erreur SQL 1347: xxxx n'est pas VIEW "

Comportement actuel


Les vues obtiennent une erreur lors de l'exportation "SQL Error 1347: xxxx is not VIEW"
Ils ont été créés sous forme de tableaux.

Comportement prévisible


Les vues n'ont pas été exportées en tant que "Vues"

Solution possible

Environnement

  • Version HeidiSQL : 10.2.0.5695
  • Système et version de la base de données : Version Mysql : 8.0.17 - Classement de la base de données : utf8mb4_0900_ai_ci
  • Système d'exploitation : Windows 10

Image 1
Screenshot_2
Image 2
Screenshot_3
Image 3
Screenshot_4

bug confirmed nettype-mysql

Commentaire le plus utile

Je crois que la racine de ce problème n'est pas le DROP VIEW IF EXISTS xyz , mais que HeidiSQL crée les vues sous forme de tables lors du déplacement d'éléments d'une base de données à une autre.

J'ai essayé de le faire sur une base de données totalement vide et HeidiSQL a créé les vues sous forme de tables, ce qui a à son tour causé ce problème.

Tous les 3 commentaires

Le problème est dans MySQL 8, le comportement modifié de DROP VIEW xyz . Le nouveau comportement est décrit ici : https://dev.mysql.com/doc/refman/8.0/en/drop-view.html
Bien que la documentation le dise clairement lors de l'utilisation de DROP VIEW IF EXISTS xyz , alors juste une note revient, pas une erreur. HeidiSQL déclenche la requête en raison de la case à cocher de gauche cochée (Drop tables) et la déclenche avec la clause IF EXISTS , ce qui devrait éviter l'erreur. Évidemment, il renvoie toujours une erreur si xyz existe en tant que table. Je ne sais pas si c'est un bogue dans MySQL ou si c'est intentionnel. Les documents sont cependant incomplets et je n'ai aucune idée de solution de contournement.

Je crois que la racine de ce problème n'est pas le DROP VIEW IF EXISTS xyz , mais que HeidiSQL crée les vues sous forme de tables lors du déplacement d'éléments d'une base de données à une autre.

J'ai essayé de le faire sur une base de données totalement vide et HeidiSQL a créé les vues sous forme de tables, ce qui a à son tour causé ce problème.

Une solution possible serait de faire la même chose que mysqldump fait pour résoudre ce problème :

--
-- 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> */;
Cette page vous a été utile?
0 / 5 - 0 notes