Bug #83326 | Table generated on export as placeholder for view has bad syntax | ||
---|---|---|---|
Submitted: | 11 Oct 2016 0:54 | Modified: | 19 Oct 2016 1:16 |
Reporter: | C D Tavares | Email Updates: | |
Status: | Can't repeat | Impact on me: | |
Category: | MySQL Server | Severity: | S3 (Non-critical) |
Version: | 5.7.15 | OS: | MacOS (10.11.6) |
Assigned to: | CPU Architecture: | Any |
[11 Oct 2016 0:54]
C D Tavares
[11 Oct 2016 12:11]
Peter Laursen
Using 5.7.15 this imports CREATE TABLE `invoice_intermediate` ( `customername` VARCHAR(42) NULL DEFAULT NULL, `fee` DOUBLE NULL DEFAULT NULL, `share` DOUBLE NULL DEFAULT NULL, `note` VARCHAR(200) NULL DEFAULT NULL ) ENGINE=MYISAM; .. but this does not CREATE TABLE `invoice_intermediate` ( `customername` VARCHAR(42), `fee` DOUBLE(19), `share` DOUBLE(19), `note` VARCHAR(200) ) ENGINE=MYISAM; So it rather seems that "DOUBLE(19)" is the culprit here. According to http://dev.mysql.com/doc/refman/5.7/en/floating-point-types.html the legth is optional but if specified it should be a number pair like "DOUBLE(19,0)". This works: CREATE TABLE `invoice_intermediate` ( `customername` VARCHAR(42) NULL DEFAULT NULL, `fee` DOUBLE(19,0) NULL DEFAULT NULL, `share` DOUBLE(19,0) NULL DEFAULT NULL, `note` VARCHAR(200) NULL DEFAULT NULL ) ENGINE=MYISAM; The bug is when exporting not when importing IMO. In other ords the test case tells it is the old version that is buggy/generates invalid SQL. There was some "turbulence" and bugs with mysqldump' around 5.7.8 release due to the introduction of 'virtual columns' in MySQL. I wrote this blog http://blog.webyog.com/beware-virtual-columns-may-render-backups-unusable/ at the time (commenting on another issue). As far as I remember virtual columns were introduced in 5.7.7 but only handled by mysldump from 5.7.8. So if I am right, mysqldmp code had an overhaul in 5.7.8 - and an overhaul that may have introduced this bug. But I don't know if this is fixed in mysldump as of 5.7.15. -- Peter -- not a MySQL/Oracle person
[11 Oct 2016 12:18]
Peter Laursen
.. and accordingly category should be "clients and not "server" IMO.
[11 Oct 2016 12:31]
Peter Laursen
hmmm .. it seems that virtual columns arrived in MySQL 5.7.8 and only started working with mysqldump as of 5.7.9. I read up my on bug report http://bugs.mysql.com/bug.php?id=79148. So this seems unrelated to changes to mysldump in 5.7.9. No matter what: the CREATE TABLE statement, as you pasted it, has a syntax error for DOUBLE()s.
[11 Oct 2016 14:33]
Peter Laursen
I cannot reproduce the bugw ith mysqldump as of 5.7.15. It also seems thw recent mysqldump introduces another concept than the placeholder table. It creates a a temporary VIEW instead like this /*!50001 CREATE VIEW `invoice_intermediate` AS SELECT 1 AS `customername`, 1 AS `fee`, 1 AS `share`, 1 AS `note`*/; SET character_set_client = @saved_cs_client; My testcase was CREATE TABLE `invoice` ( `customername` VARCHAR(42) NULL DEFAULT NULL, `fee` DOUBLE(19,0) NULL DEFAULT NULL, `share` DOUBLE(19,0) NULL DEFAULT NULL, `note` VARCHAR(200) NULL DEFAULT NULL ) ENGINE=MYISAM; CREATE VIEW `invoice_intermediate` AS SELECT * FROM `invoice`; .. and as said it dumped and imported fine.
[18 Oct 2016 23:40]
MySQL Verification Team
Which tool you have used to export the database, because the issue looks like Peter commented: c:\dbs>c:\dbs\5.7\bin\mysql -uroot --port=3570 -p --prompt="mysql 5.7 > " Enter password: ****** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.7.17 Source distribution PULL: 2016-OCT-14 Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql 5.7 > use test Database changed mysql 5.7 > CREATE TABLE `invoice_intermediate` ( -> `customername` VARCHAR(42) NULL DEFAULT NULL, -> `fee` DOUBLE(19) NULL DEFAULT NULL, -> `share` DOUBLE(19) NULL DEFAULT NULL, -> `note` VARCHAR(200) NULL DEFAULT NULL -> ) ENGINE=MyISAM; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') NULL DEFAULT NULL, `share` DOUBLE(19) NULL DEFAULT NULL, `note` VARCHAR(' at line 3 mysql 5.7 > CREATE TABLE `invoice_intermediate` ( -> `customername` VARCHAR(42) NULL DEFAULT NULL, -> `fee` DOUBLE(19,0) NULL DEFAULT NULL, -> `share` DOUBLE(19,0) NULL DEFAULT NULL, -> `note` VARCHAR(200) NULL DEFAULT NULL -> ) ENGINE=MyISAM; Query OK, 0 rows affected (0.06 sec)
[19 Oct 2016 0:24]
C D Tavares
Sequel Pro (sequelpro.com), on MacOS El Capitan.
[19 Oct 2016 1:16]
MySQL Verification Team
Thank you for the feedback. Please try the MySQL client tool mysqldump: c:\dbs>5.7\bin\mysqldump -uroot -p --port=3570 u2 Enter password: ****** -- MySQL dump 10.13 Distrib 5.7.17, for Win64 (x86_64) -- -- Host: localhost Database: u2 -- ------------------------------------------------------ -- Server version 5.7.17 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `invoice_intermediate` -- DROP TABLE IF EXISTS `invoice_intermediate`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `invoice_intermediate` ( `customername` varchar(42) DEFAULT NULL, `fee` double(19,0) DEFAULT NULL, `share` double(19,0) DEFAULT NULL, `note` varchar(200) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `invoice_intermediate` -- LOCK TABLES `invoice_intermediate` WRITE; /*!40000 ALTER TABLE `invoice_intermediate` DISABLE KEYS */; /*!40000 ALTER TABLE `invoice_intermediate` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2016-10-18 23:11:46